mirror of
https://github.com/JKorf/CryptoExchange.Net.git
synced 2026-11-04 09:17:53 +00:00
Fixed cancellation source disposal race in CloseAsync (#300)
This commit is contained in:
@@ -446,27 +446,28 @@ namespace CryptoExchange.Net.Sockets.Default
|
||||
if (_closeTask?.IsCompleted == false)
|
||||
{
|
||||
_logger.SocketCloseAsyncWaitingForExistingCloseTask(Id);
|
||||
await _closeTask.ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!IsOpen)
|
||||
else
|
||||
{
|
||||
if (!IsOpen)
|
||||
_logger.SocketCloseAsyncSocketNotOpen(Id);
|
||||
return;
|
||||
}
|
||||
|
||||
else
|
||||
_logger.SocketClosing(Id);
|
||||
|
||||
_closeTask = CloseInternalAsync();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
_closeSem.Release();
|
||||
}
|
||||
|
||||
await _closeTask.ConfigureAwait(false);
|
||||
|
||||
// Processing may still be running after the socket closes; finish before the caller disposes it.
|
||||
if(_processTask != null)
|
||||
await _processTask.ConfigureAwait(false);
|
||||
|
||||
await (OnClose?.Invoke() ?? Task.CompletedTask).ConfigureAwait(false);
|
||||
_logger.SocketClosed(Id);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user