Kittyfisto / SharpRemote

A .NET remoting library
MIT License
12 stars 5 forks source link

Fixed race condition in OutOfProcessQueue #66 #67

Open Kittyfisto opened 4 years ago

Kittyfisto commented 4 years ago

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.