From 3ef00d03685beaa38c7c1b50c91e05da79c54922 Mon Sep 17 00:00:00 2001 From: sta Date: Sun, 24 Sep 2017 19:47:52 +0900 Subject: [PATCH] [Modify] Polish it --- .../Server/WebSocketSessionManager.cs | 41 ++++++++++++------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/websocket-sharp/Server/WebSocketSessionManager.cs b/websocket-sharp/Server/WebSocketSessionManager.cs index bfd908b0..32d59c85 100644 --- a/websocket-sharp/Server/WebSocketSessionManager.cs +++ b/websocket-sharp/Server/WebSocketSessionManager.cs @@ -1615,31 +1615,42 @@ namespace WebSocketSharp.Server /// public void Sweep () { - if (_state != ServerState.Start || _sweeping || Count == 0) + if (_sweeping) { + _log.Info ("The sweeping is already in progress."); return; + } lock (_forSweep) { + if (_sweeping) { + _log.Info ("The sweeping is already in progress."); + return; + } + _sweeping = true; - foreach (var id in InactiveIDs) { + } + + foreach (var id in InactiveIDs) { + if (_state != ServerState.Start) + break; + + lock (_sync) { if (_state != ServerState.Start) break; - lock (_sync) { - IWebSocketSession session; - if (_sessions.TryGetValue (id, out session)) { - var state = session.State; - if (state == WebSocketState.Open) - session.Context.WebSocket.Close (CloseStatusCode.ProtocolError); - else if (state == WebSocketState.Closing) - continue; - else - _sessions.Remove (id); - } + IWebSocketSession session; + if (_sessions.TryGetValue (id, out session)) { + var state = session.State; + if (state == WebSocketState.Open) + session.Context.WebSocket.Close (CloseStatusCode.Abnormal); + else if (state == WebSocketState.Closing) + continue; + else + _sessions.Remove (id); } } - - _sweeping = false; } + + _sweeping = false; } ///