diff --git a/websocket-sharp/Net/HttpListener.cs b/websocket-sharp/Net/HttpListener.cs index 72b03968..16087c49 100644 --- a/websocket-sharp/Net/HttpListener.cs +++ b/websocket-sharp/Net/HttpListener.cs @@ -469,16 +469,17 @@ namespace WebSocketSharp.Net cleanup (force); } - // Must be called with a lock on _ctxQueue. private HttpListenerContext getContextFromQueue () { - if (_ctxQueue.Count == 0) - return null; + lock (_ctxQueueSync) { + if (_ctxQueue.Count == 0) + return null; - var ctx = _ctxQueue[0]; - _ctxQueue.RemoveAt (0); + var ctx = _ctxQueue[0]; + _ctxQueue.RemoveAt (0); - return ctx; + return ctx; + } } private void sendServiceUnavailable () @@ -561,12 +562,10 @@ namespace WebSocketSharp.Net // Lock _waitQueue early to avoid race conditions. lock (_waitQueueSync) { - lock (_ctxQueueSync) { - var ctx = getContextFromQueue (); - if (ctx != null) { - asyncResult.Complete (ctx, true); - return asyncResult; - } + var ctx = getContextFromQueue (); + if (ctx != null) { + asyncResult.Complete (ctx, true); + return asyncResult; } _waitQueue.Add (asyncResult);