From 6e07eab247f51532e74de7ceaaf567156c46e39c Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Sun, 24 Feb 2019 21:44:56 +0100 Subject: [PATCH 1/3] Don't close the socket response multiple times --- .../SocketSharp/WebSocketSharpListener.cs | 23 ++++--------------- 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/Jellyfin.Server/SocketSharp/WebSocketSharpListener.cs b/Jellyfin.Server/SocketSharp/WebSocketSharpListener.cs index 736f9feef8..3b98753181 100644 --- a/Jellyfin.Server/SocketSharp/WebSocketSharpListener.cs +++ b/Jellyfin.Server/SocketSharp/WebSocketSharpListener.cs @@ -129,6 +129,7 @@ namespace Jellyfin.Server.SocketSharp private async Task ProcessWebSocketRequest(HttpListenerContext ctx) { + int statusCode = 200; try { var endpoint = ctx.Request.RemoteEndPoint.ToString(); @@ -164,33 +165,23 @@ namespace Jellyfin.Server.SocketSharp Endpoint = endpoint }); - await ReceiveWebSocketAsync(ctx, socket).ConfigureAwait(false); + await socket.StartReceive().ConfigureAwait(false); } } else { _logger.LogWarning("Web socket connection not allowed"); - ctx.Response.StatusCode = 401; - ctx.Response.Close(); + statusCode = 401; } } catch (Exception ex) { _logger.LogError(ex, "AcceptWebSocketAsync error"); - ctx.Response.StatusCode = 500; - ctx.Response.Close(); - } - } - - private async Task ReceiveWebSocketAsync(HttpListenerContext ctx, SharpWebSocket socket) - { - try - { - await socket.StartReceive().ConfigureAwait(false); + statusCode = 500; } finally { - TryClose(ctx, 200); + TryClose(ctx, statusCode); } } @@ -201,10 +192,6 @@ namespace Jellyfin.Server.SocketSharp ctx.Response.StatusCode = statusCode; ctx.Response.Close(); } - catch (ObjectDisposedException) - { - // TODO: Investigate and properly fix. - } catch (Exception ex) { _logger.LogError(ex, "Error closing web socket response"); From 5262e50fee325bff1e0996a7cc6d43fd1c17f7be Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Sun, 24 Feb 2019 22:28:46 +0100 Subject: [PATCH 2/3] Try another fix --- Jellyfin.Server/SocketSharp/WebSocketSharpListener.cs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Jellyfin.Server/SocketSharp/WebSocketSharpListener.cs b/Jellyfin.Server/SocketSharp/WebSocketSharpListener.cs index 3b98753181..9c8d3e1d81 100644 --- a/Jellyfin.Server/SocketSharp/WebSocketSharpListener.cs +++ b/Jellyfin.Server/SocketSharp/WebSocketSharpListener.cs @@ -171,17 +171,13 @@ namespace Jellyfin.Server.SocketSharp else { _logger.LogWarning("Web socket connection not allowed"); - statusCode = 401; + TryClose(ctx, 401); } } catch (Exception ex) { _logger.LogError(ex, "AcceptWebSocketAsync error"); - statusCode = 500; - } - finally - { - TryClose(ctx, statusCode); + TryClose(ctx, 500); } } From 4df3333b7116636e56967b332c0e66b6c36960c2 Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Sun, 24 Feb 2019 22:31:46 +0100 Subject: [PATCH 3/3] Remove the unused status code --- Jellyfin.Server/SocketSharp/WebSocketSharpListener.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Jellyfin.Server/SocketSharp/WebSocketSharpListener.cs b/Jellyfin.Server/SocketSharp/WebSocketSharpListener.cs index 9c8d3e1d81..693c2328c6 100644 --- a/Jellyfin.Server/SocketSharp/WebSocketSharpListener.cs +++ b/Jellyfin.Server/SocketSharp/WebSocketSharpListener.cs @@ -129,7 +129,6 @@ namespace Jellyfin.Server.SocketSharp private async Task ProcessWebSocketRequest(HttpListenerContext ctx) { - int statusCode = 200; try { var endpoint = ctx.Request.RemoteEndPoint.ToString();