aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/HttpServer
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-09-27 17:08:51 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-09-27 17:08:51 -0400
commitdf29ed5a6fb290ed9e3dfdf64e0953f8f39df93c (patch)
tree7f59f609d5f8f6a9108acb4804bdcd9922c3dca8 /MediaBrowser.Server.Implementations/HttpServer
parent51a6ee565092ab02fcb7bf8c94d27d87488c0690 (diff)
cancel web socket operations on dispose
Diffstat (limited to 'MediaBrowser.Server.Implementations/HttpServer')
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs11
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();
}
}