diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-09-27 17:08:51 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-09-27 17:08:51 -0400 |
| commit | df29ed5a6fb290ed9e3dfdf64e0953f8f39df93c (patch) | |
| tree | 7f59f609d5f8f6a9108acb4804bdcd9922c3dca8 /MediaBrowser.Server.Implementations/HttpServer | |
| parent | 51a6ee565092ab02fcb7bf8c94d27d87488c0690 (diff) | |
cancel web socket operations on dispose
Diffstat (limited to 'MediaBrowser.Server.Implementations/HttpServer')
| -rw-r--r-- | MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs b/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs index 6d6aa6325..a91dbbe4c 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs @@ -25,6 +25,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer /// <value>The web socket.</value> private System.Net.WebSockets.WebSocket WebSocket { get; set; } + private CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource(); + /// <summary> /// Initializes a new instance of the <see cref="NativeWebSocket" /> class. /// </summary> @@ -79,7 +81,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer try { - bytes = await ReceiveBytesAsync(CancellationToken.None).ConfigureAwait(false); + bytes = await ReceiveBytesAsync(_cancellationTokenSource.Token).ConfigureAwait(false); } catch (OperationCanceledException) { @@ -144,7 +146,9 @@ namespace MediaBrowser.Server.Implementations.HttpServer _logger.Warn("Unrecognized WebSocketMessageType: {0}", type.ToString()); } - return WebSocket.SendAsync(new ArraySegment<byte>(bytes), nativeType, true, cancellationToken); + var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, _cancellationTokenSource.Token); + + return WebSocket.SendAsync(new ArraySegment<byte>(bytes), nativeType, true, linkedTokenSource.Token); } /// <summary> @@ -163,6 +167,9 @@ namespace MediaBrowser.Server.Implementations.HttpServer { if (dispose) { + _cancellationTokenSource.Cancel(); + _cancellationTokenSource.Dispose(); + WebSocket.Dispose(); } } |
