The child process was able to survive a call to Dispose() if it crashed right before Dispose() was called.
OutOfProcessQueue.Dispose() now performs synchronisation at the cost of of a slightly changed behaviour visible to users, if they call dispose from within a FailureHandler callback:
Prior to this bugfix, Dispose() did not block (which caused this behavior in the first place), however users calling Dispose() from within the FailureHandler did not see any delays: Dispose() returned immediately.
Now Dispose() blocks until the worker thread is stopped, however since the worker thread executes the failure handler, we this would cause a deadlock. Dispose() circumnavigates this by waiting for a maximum of 5 seconds and the continuing nevertheless.
However, in the end, calling Dispose() from within a callback is very strongly discouraged nevertheless.
The child process was able to survive a call to Dispose() if it crashed right before Dispose() was called. OutOfProcessQueue.Dispose() now performs synchronisation at the cost of of a slightly changed behaviour visible to users, if they call dispose from within a FailureHandler callback:
Prior to this bugfix, Dispose() did not block (which caused this behavior in the first place), however users calling Dispose() from within the FailureHandler did not see any delays: Dispose() returned immediately.
Now Dispose() blocks until the worker thread is stopped, however since the worker thread executes the failure handler, we this would cause a deadlock. Dispose() circumnavigates this by waiting for a maximum of 5 seconds and the continuing nevertheless. However, in the end, calling Dispose() from within a callback is very strongly discouraged nevertheless.