diff options
| author | Negulici-R. Barnabas <109497789+negulici-r-barnabas@users.noreply.github.com> | 2022-07-25 07:16:04 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-25 07:16:04 +0300 |
| commit | a1f1fd9a5ca193f60ab1833b3f0c91ca68f38bed (patch) | |
| tree | 419f2a8a95f377eca49966fc1f746287a303b709 /Emby.Server.Implementations/HttpServer/WebSocketConnection.cs | |
| parent | 4fac67c097ac0328fcc5deb1b6264ea3cec4ce5b (diff) | |
| parent | bffda19bbc9d8fe95c864d7315a0c6f6a05d9d7d (diff) | |
Merge branch 'jellyfin:master' into master
Diffstat (limited to 'Emby.Server.Implementations/HttpServer/WebSocketConnection.cs')
| -rw-r--r-- | Emby.Server.Implementations/HttpServer/WebSocketConnection.cs | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/Emby.Server.Implementations/HttpServer/WebSocketConnection.cs b/Emby.Server.Implementations/HttpServer/WebSocketConnection.cs index b87f1bc22..818ccbb1b 100644 --- a/Emby.Server.Implementations/HttpServer/WebSocketConnection.cs +++ b/Emby.Server.Implementations/HttpServer/WebSocketConnection.cs @@ -19,7 +19,7 @@ namespace Emby.Server.Implementations.HttpServer /// <summary> /// Class WebSocketConnection. /// </summary> - public class WebSocketConnection : IWebSocketConnection, IDisposable + public class WebSocketConnection : IWebSocketConnection { /// <summary> /// The logger. @@ -36,6 +36,8 @@ namespace Emby.Server.Implementations.HttpServer /// </summary> private readonly WebSocket _socket; + private bool _disposed = false; + /// <summary> /// Initializes a new instance of the <see cref="WebSocketConnection" /> class. /// </summary> @@ -244,10 +246,39 @@ namespace Emby.Server.Implementations.HttpServer /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> protected virtual void Dispose(bool dispose) { + if (_disposed) + { + return; + } + if (dispose) { _socket.Dispose(); } + + _disposed = true; + } + + /// <inheritdoc /> + public async ValueTask DisposeAsync() + { + await DisposeAsyncCore().ConfigureAwait(false); + Dispose(false); + GC.SuppressFinalize(this); + } + + /// <summary> + /// Used to perform asynchronous cleanup of managed resources or for cascading calls to <see cref="DisposeAsync"/>. + /// </summary> + /// <returns>A ValueTask.</returns> + protected virtual async ValueTask DisposeAsyncCore() + { + if (_socket.State == WebSocketState.Open) + { + await _socket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "System Shutdown", CancellationToken.None).ConfigureAwait(false); + } + + _socket.Dispose(); } } } |
