From eef990f529f159dcc049d1d0ba77ee870ce08f17 Mon Sep 17 00:00:00 2001 From: noisyfox Date: Thu, 15 Dec 2016 17:23:12 +1100 Subject: [PATCH] Check close before create reomte Check null ref (#940) --- .../Controller/Service/TCPRelay.cs | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/shadowsocks-csharp/Controller/Service/TCPRelay.cs b/shadowsocks-csharp/Controller/Service/TCPRelay.cs index f261d345..0687f4a5 100644 --- a/shadowsocks-csharp/Controller/Service/TCPRelay.cs +++ b/shadowsocks-csharp/Controller/Service/TCPRelay.cs @@ -246,16 +246,21 @@ namespace Shadowsocks.Controller.Service { Logging.LogUsefulException(e); } - try - { - var remote = _currentRemoteSession.Remote; - remote.Shutdown(SocketShutdown.Both); - remote.Close(); - } - catch (Exception e) + + if (_currentRemoteSession != null) { - Logging.LogUsefulException(e); + try + { + var remote = _currentRemoteSession.Remote; + remote.Shutdown(SocketShutdown.Both); + remote.Close(); + } + catch (Exception e) + { + Logging.LogUsefulException(e); + } } + lock (_encryptionLock) { lock (_decryptionLock) @@ -319,7 +324,16 @@ namespace Shadowsocks.Controller.Service } var session = new AsyncSession(remote); - _currentRemoteSession = session; + lock (_closeConnLock) + { + if (Closed) + { + remote.Close(); + return; + } + + _currentRemoteSession = session; + } ProxyTimer proxyTimer = new ProxyTimer(_proxyTimeout); proxyTimer.AutoReset = false;