Просмотр исходного кода

Fixed disposable not being called (#10613)

* Fixed disposable not being called

* PulledUp usage of IAsyncDisposable for sessioninfo

Co-authored-by: Patrick Barron <barronpm@gmail.com>
JPVenson 1 год назад
Родитель
Сommit
3ce16713dd

+ 6 - 6
Emby.Server.Implementations/Session/SessionManager.cs

@@ -189,7 +189,7 @@ namespace Emby.Server.Implementations.Session
                 _logger);
         }
 
-        private void OnSessionEnded(SessionInfo info)
+        private async ValueTask OnSessionEnded(SessionInfo info)
         {
             EventHelper.QueueEventIfNotNull(
                 SessionEnded,
@@ -202,7 +202,7 @@ namespace Emby.Server.Implementations.Session
 
             _eventManager.Publish(new SessionEndedEventArgs(info));
 
-            info.Dispose();
+            await info.DisposeAsync().ConfigureAwait(false);
         }
 
         /// <inheritdoc />
@@ -301,12 +301,12 @@ namespace Emby.Server.Implementations.Session
                     await _mediaSourceManager.CloseLiveStream(session.PlayState.LiveStreamId).ConfigureAwait(false);
                 }
 
-                OnSessionEnded(session);
+                await OnSessionEnded(session).ConfigureAwait(false);
             }
         }
 
         /// <inheritdoc />
-        public void ReportSessionEnded(string sessionId)
+        public async ValueTask ReportSessionEnded(string sessionId)
         {
             CheckDisposed();
             var session = GetSession(sessionId, false);
@@ -317,7 +317,7 @@ namespace Emby.Server.Implementations.Session
 
                 _activeConnections.TryRemove(key, out _);
 
-                OnSessionEnded(session);
+                await OnSessionEnded(session).ConfigureAwait(false);
             }
         }
 
@@ -1590,7 +1590,7 @@ namespace Emby.Server.Implementations.Session
             {
                 try
                 {
-                    ReportSessionEnded(session.Id);
+                    await ReportSessionEnded(session.Id).ConfigureAwait(false);
                 }
                 catch (Exception ex)
                 {

+ 2 - 1
MediaBrowser.Controller/Session/ISessionManager.cs

@@ -111,7 +111,8 @@ namespace MediaBrowser.Controller.Session
         /// Reports the session ended.
         /// </summary>
         /// <param name="sessionId">The session identifier.</param>
-        void ReportSessionEnded(string sessionId);
+        /// <returns>Task.</returns>
+        ValueTask ReportSessionEnded(string sessionId);
 
         /// <summary>
         /// Sends the general command.

+ 7 - 21
MediaBrowser.Controller/Session/SessionInfo.cs

@@ -19,7 +19,7 @@ namespace MediaBrowser.Controller.Session
     /// <summary>
     /// Class SessionInfo.
     /// </summary>
-    public sealed class SessionInfo : IAsyncDisposable, IDisposable
+    public sealed class SessionInfo : IAsyncDisposable
     {
         // 1 second
         private const long ProgressIncrement = 10000000;
@@ -374,26 +374,6 @@ namespace MediaBrowser.Controller.Session
             }
         }
 
-        /// <inheritdoc />
-        public void Dispose()
-        {
-            _disposed = true;
-
-            StopAutomaticProgress();
-
-            var controllers = SessionControllers.ToList();
-            SessionControllers = Array.Empty<ISessionController>();
-
-            foreach (var controller in controllers)
-            {
-                if (controller is IDisposable disposable)
-                {
-                    _logger.LogDebug("Disposing session controller synchronously {TypeName}", disposable.GetType().Name);
-                    disposable.Dispose();
-                }
-            }
-        }
-
         public async ValueTask DisposeAsync()
         {
             _disposed = true;
@@ -401,6 +381,7 @@ namespace MediaBrowser.Controller.Session
             StopAutomaticProgress();
 
             var controllers = SessionControllers.ToList();
+            SessionControllers = Array.Empty<ISessionController>();
 
             foreach (var controller in controllers)
             {
@@ -409,6 +390,11 @@ namespace MediaBrowser.Controller.Session
                     _logger.LogDebug("Disposing session controller asynchronously {TypeName}", disposableAsync.GetType().Name);
                     await disposableAsync.DisposeAsync().ConfigureAwait(false);
                 }
+                else if (controller is IDisposable disposable)
+                {
+                    _logger.LogDebug("Disposing session controller synchronously {TypeName}", disposable.GetType().Name);
+                    disposable.Dispose();
+                }
             }
         }
     }