diff options
| author | Jayson Reis <santosdosreis@gmail.com> | 2022-01-22 21:52:30 +0000 |
|---|---|---|
| committer | Jayson Reis <santosdosreis@gmail.com> | 2022-01-22 21:52:30 +0000 |
| commit | 2e4dd02f76ec9a8487de7e1ceb0b0871c5be766d (patch) | |
| tree | 9dcc41e70cda53c35ca6cf84782c55edccf83102 | |
| parent | cd4587b43f9831a9529ddaed50ba4b9935fa061b (diff) | |
chore: Add a read only connection for routes like Shows/NextUp
| -rw-r--r-- | Emby.Server.Implementations/Data/BaseSqliteRepository.cs | 7 | ||||
| -rw-r--r-- | Emby.Server.Implementations/Data/ManagedConnection.cs | 7 |
2 files changed, 11 insertions, 3 deletions
diff --git a/Emby.Server.Implementations/Data/BaseSqliteRepository.cs b/Emby.Server.Implementations/Data/BaseSqliteRepository.cs index 450688491..3ca9977c8 100644 --- a/Emby.Server.Implementations/Data/BaseSqliteRepository.cs +++ b/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) { diff --git a/Emby.Server.Implementations/Data/ManagedConnection.cs b/Emby.Server.Implementations/Data/ManagedConnection.cs index 11e33278d..97cb6f26f 100644 --- a/Emby.Server.Implementations/Data/ManagedConnection.cs +++ b/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; |
