diff --git a/Emby.Server.Implementations/Session/SessionManager.cs b/Emby.Server.Implementations/Session/SessionManager.cs
index 6f599e4c7c..f457a78b3b 100644
--- a/Emby.Server.Implementations/Session/SessionManager.cs
+++ b/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);
}
///
@@ -301,12 +301,12 @@ namespace Emby.Server.Implementations.Session
await _mediaSourceManager.CloseLiveStream(session.PlayState.LiveStreamId).ConfigureAwait(false);
}
- OnSessionEnded(session);
+ await OnSessionEnded(session).ConfigureAwait(false);
}
}
///
- 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)
{
diff --git a/MediaBrowser.Controller/Session/ISessionManager.cs b/MediaBrowser.Controller/Session/ISessionManager.cs
index 53df7133b5..5a47236f92 100644
--- a/MediaBrowser.Controller/Session/ISessionManager.cs
+++ b/MediaBrowser.Controller/Session/ISessionManager.cs
@@ -111,7 +111,8 @@ namespace MediaBrowser.Controller.Session
/// Reports the session ended.
///
/// The session identifier.
- void ReportSessionEnded(string sessionId);
+ /// Task.
+ ValueTask ReportSessionEnded(string sessionId);
///
/// Sends the general command.
diff --git a/MediaBrowser.Controller/Session/SessionInfo.cs b/MediaBrowser.Controller/Session/SessionInfo.cs
index 3e30c8dc45..3a12a56f1e 100644
--- a/MediaBrowser.Controller/Session/SessionInfo.cs
+++ b/MediaBrowser.Controller/Session/SessionInfo.cs
@@ -19,7 +19,7 @@ namespace MediaBrowser.Controller.Session
///
/// Class SessionInfo.
///
- 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
}
}
- ///
- public void Dispose()
- {
- _disposed = true;
-
- StopAutomaticProgress();
-
- var controllers = SessionControllers.ToList();
- SessionControllers = Array.Empty();
-
- 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();
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();
+ }
}
}
}