xenserver / xenadmin

XenCenter, the Windows management console for XenServer
BSD 2-Clause "Simplified" License
244 stars 237 forks source link

CA-379971: Ensure `ParallelAction` is not waiting on `_lock` when no actions are running #3244

Closed danilo-delbusso closed 1 year ago

danilo-delbusso commented 1 year ago

One could also fix this by not running actions as soon as the EnqueueAction is called (or maybe calling Monitor.Wait before the actions have started), but I didn't want to touch a lot of this code and potentially add new issues.


The issue we're fixing here is that there is a chance that all actions have completed before we hit the Wait call, we need to make sure we don't hit a deadlock.

This can happen if for instance there is only one action, and it is a "dummy" action, such as the one used in the EUA check.

Also I have removed the compound assignment for the volatile _completedActionsCount since Visual Studio was flagging it as a "suspicious usage of a volatile variable". I personally don't think it's a problem but better safe than sorry.

Contains minor whitespace fixes, too