소스 검색

chore: Add a read only connection for routes like Shows/NextUp

Jayson Reis 3 년 전
부모
커밋
2e4dd02f76
2개의 변경된 파일11개의 추가작업 그리고 3개의 파일을 삭제
  1. 7 0
      Emby.Server.Implementations/Data/BaseSqliteRepository.cs
  2. 4 3
      Emby.Server.Implementations/Data/ManagedConnection.cs

+ 7 - 0
Emby.Server.Implementations/Data/BaseSqliteRepository.cs

@@ -97,9 +97,16 @@ namespace Emby.Server.Implementations.Data
         /// </summary>
         /// <value>The write connection.</value>
         protected SQLiteDatabaseConnection WriteConnection { get; set; }
+        protected SQLiteDatabaseConnection ReadConnection { get; set; }
 
         protected ManagedConnection GetConnection(bool readOnly = false)
         {
+            if (readOnly)
+            {
+                ReadConnection ??= SQLite3.Open(DbFilePath, DefaultConnectionFlags | ConnectionFlags.ReadOnly, null);
+                return new ManagedConnection(ReadConnection, null);
+            }
+
             WriteLock.Wait();
             if (WriteConnection != null)
             {

+ 4 - 3
Emby.Server.Implementations/Data/ManagedConnection.cs

@@ -9,11 +9,12 @@ namespace Emby.Server.Implementations.Data
 {
     public sealed class ManagedConnection : IDisposable
     {
-        private readonly SemaphoreSlim _writeLock;
+        private readonly SemaphoreSlim? _writeLock;
 
         private SQLiteDatabaseConnection? _db;
 
-        private bool _disposed = false;
+        private bool _disposed;
+
 
         public ManagedConnection(SQLiteDatabaseConnection db, SemaphoreSlim writeLock)
         {
@@ -73,7 +74,7 @@ namespace Emby.Server.Implementations.Data
                 return;
             }
 
-            _writeLock.Release();
+            _writeLock?.Release();
 
             _db = null; // Don't dispose it
             _disposed = true;