2
0
Эх сурвалжийг харах

Moved IAsyncDisposable and IDisposable from WebSocketConnection to it's interface. Added private variable and guard statement to avoid disposing of WebSocketConnection unnecessarily.

Luke Brown 3 жил өмнө
parent
commit
abfbd04782

+ 10 - 1
Emby.Server.Implementations/HttpServer/WebSocketConnection.cs

@@ -19,7 +19,7 @@ namespace Emby.Server.Implementations.HttpServer
     /// <summary>
     /// Class WebSocketConnection.
     /// </summary>
-    public class WebSocketConnection : IWebSocketConnection, IAsyncDisposable, 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,17 @@ 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 />

+ 2 - 5
Emby.Server.Implementations/Session/WebSocketController.cs

@@ -99,6 +99,7 @@ namespace Emby.Server.Implementations.Session
             foreach (var socket in _sockets)
             {
                 socket.Closed -= OnConnectionClosed;
+                socket.Dispose();
             }
 
             _disposed = true;
@@ -114,11 +115,7 @@ namespace Emby.Server.Implementations.Session
             foreach (var socket in _sockets)
             {
                 socket.Closed -= OnConnectionClosed;
-
-                if (socket is IAsyncDisposable disposableAsync)
-                {
-                    await disposableAsync.DisposeAsync().ConfigureAwait(false);
-                }
+                await socket.DisposeAsync().ConfigureAwait(false);
             }
 
             _disposed = true;