[Fix] Lock it early

This commit is contained in:
sta 2016-04-04 04:48:26 +09:00
parent 655acc6528
commit 83a07a988d

View File

@ -560,15 +560,20 @@ namespace WebSocketSharp.Net
if (!_listening) if (!_listening)
throw new InvalidOperationException ("The listener hasn't been started."); throw new InvalidOperationException ("The listener hasn't been started.");
// Lock _waitQueue early to avoid race conditions. // Lock _ctxRegistrySync early to avoid race conditions.
lock (_waitQueueSync) { lock (_ctxRegistrySync) {
var ctx = getContextFromQueue (); if (!_listening)
if (ctx != null) { throw new InvalidOperationException ("The listener is stopped/closed.");
asyncResult.Complete (ctx, true);
return asyncResult;
}
_waitQueue.Add (asyncResult); lock (_waitQueueSync) {
var ctx = getContextFromQueue ();
if (ctx != null) {
asyncResult.Complete (ctx, true);
return asyncResult;
}
_waitQueue.Add (asyncResult);
}
} }
return asyncResult; return asyncResult;