diff --git a/CryptoExchange.Net/CryptoExchange.Net.csproj b/CryptoExchange.Net/CryptoExchange.Net.csproj index 9f524bb..51651dd 100644 --- a/CryptoExchange.Net/CryptoExchange.Net.csproj +++ b/CryptoExchange.Net/CryptoExchange.Net.csproj @@ -7,7 +7,7 @@ CryptoExchange.Net JKorf - 0.0.41 + 0.0.42 false https://github.com/JKorf/CryptoExchange.Net https://github.com/JKorf/CryptoExchange.Net/blob/master/LICENSE diff --git a/CryptoExchange.Net/Implementation/BaseSocket.cs b/CryptoExchange.Net/Implementation/BaseSocket.cs index 342f86f..75829b2 100644 --- a/CryptoExchange.Net/Implementation/BaseSocket.cs +++ b/CryptoExchange.Net/Implementation/BaseSocket.cs @@ -104,13 +104,23 @@ namespace CryptoExchange.Net.Implementation return; } + var waitLock = new object(); log.Write(LogVerbosity.Debug, "Closing websocket"); ManualResetEvent evnt = new ManualResetEvent(false); - var handler = new EventHandler((o, a) => evnt.Set()); + var handler = new EventHandler((o, a) => + { + lock(waitLock) + evnt?.Set(); + }); socket.Closed += handler; socket.Close(); - evnt.WaitOne(3000); - socket.Closed -= handler; + evnt.WaitOne(2000); + lock (waitLock) + { + socket.Closed -= handler; + evnt.Dispose(); + evnt = null; + } log.Write(LogVerbosity.Debug, "Websocket closed"); } }).ConfigureAwait(false); @@ -129,24 +139,32 @@ namespace CryptoExchange.Net.Implementation lock (socketLock) { log.Write(LogVerbosity.Debug, "Connecting websocket"); + var waitLock = new object(); ManualResetEvent evnt = new ManualResetEvent(false); var handler = new EventHandler((o, a) => evnt?.Set()); - var errorHandler = new EventHandler((o, a) => evnt?.Set()); + var errorHandler = new EventHandler((o, a) => + { + lock(waitLock) + evnt?.Set(); + }); socket.Opened += handler; socket.Closed += handler; socket.Error += errorHandler; socket.Open(); evnt.WaitOne(TimeSpan.FromSeconds(15)); - socket.Opened -= handler; - socket.Closed -= handler; - socket.Error -= errorHandler; + lock (waitLock) + { + socket.Opened -= handler; + socket.Closed -= handler; + socket.Error -= errorHandler; + evnt.Dispose(); + evnt = null; + } connected = socket.State == WebSocketState.Open; if (connected) log.Write(LogVerbosity.Debug, "Websocket connected"); else log.Write(LogVerbosity.Debug, "Websocket connection failed, state: " + socket.State); - evnt.Dispose(); - evnt = null; } if (socket.State == WebSocketState.Connecting)