소스 검색

Fix concurrency issues

Patrick Barron 4 년 전
부모
커밋
3d9c16ba6b
2개의 변경된 파일8개의 추가작업 그리고 7개의 파일을 삭제
  1. 7 6
      Jellyfin.Server.Implementations/Security/AuthorizationContext.cs
  2. 1 1
      Jellyfin.Server/CoreAppHost.cs

+ 7 - 6
Jellyfin.Server.Implementations/Security/AuthorizationContext.cs

@@ -15,12 +15,12 @@ namespace Jellyfin.Server.Implementations.Security
 {
     public class AuthorizationContext : IAuthorizationContext
     {
-        private readonly JellyfinDb _jellyfinDb;
+        private readonly JellyfinDbProvider _jellyfinDbProvider;
         private readonly IUserManager _userManager;
 
-        public AuthorizationContext(JellyfinDb jellyfinDb, IUserManager userManager)
+        public AuthorizationContext(JellyfinDbProvider jellyfinDb, IUserManager userManager)
         {
-            _jellyfinDb = jellyfinDb;
+            _jellyfinDbProvider = jellyfinDb;
             _userManager = userManager;
         }
 
@@ -117,7 +117,8 @@ namespace Jellyfin.Server.Implementations.Security
 #pragma warning restore CA1508
 
             authInfo.HasToken = true;
-            var device = await _jellyfinDb.Devices.FirstOrDefaultAsync(d => d.AccessToken == token).ConfigureAwait(false);
+            await using var jellyfinDb = _jellyfinDbProvider.CreateContext();
+            var device = await jellyfinDb.Devices.FirstOrDefaultAsync(d => d.AccessToken == token).ConfigureAwait(false);
 
             if (device != null)
             {
@@ -186,8 +187,8 @@ namespace Jellyfin.Server.Implementations.Security
 
                 if (updateToken)
                 {
-                    _jellyfinDb.Devices.Update(device);
-                    await _jellyfinDb.SaveChangesAsync().ConfigureAwait(false);
+                    jellyfinDb.Devices.Update(device);
+                    await jellyfinDb.SaveChangesAsync().ConfigureAwait(false);
                 }
             }
 

+ 1 - 1
Jellyfin.Server/CoreAppHost.cs

@@ -95,7 +95,7 @@ namespace Jellyfin.Server
             ServiceCollection.AddSingleton<IWebSocketListener, ScheduledTasksWebSocketListener>();
             ServiceCollection.AddSingleton<IWebSocketListener, SessionInfoWebSocketListener>();
 
-            ServiceCollection.AddScoped<IAuthorizationContext, AuthorizationContext>();
+            ServiceCollection.AddSingleton<IAuthorizationContext, AuthorizationContext>();
 
             base.RegisterServices();
         }