aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Data/BaseSqliteRepository.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Server.Implementations/Data/BaseSqliteRepository.cs')
-rw-r--r--Emby.Server.Implementations/Data/BaseSqliteRepository.cs80
1 files changed, 20 insertions, 60 deletions
diff --git a/Emby.Server.Implementations/Data/BaseSqliteRepository.cs b/Emby.Server.Implementations/Data/BaseSqliteRepository.cs
index db63f68d0..33a0b7ddf 100644
--- a/Emby.Server.Implementations/Data/BaseSqliteRepository.cs
+++ b/Emby.Server.Implementations/Data/BaseSqliteRepository.cs
@@ -1,9 +1,7 @@
using System;
-using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
-using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using SQLitePCL;
using SQLitePCL.pretty;
@@ -33,8 +31,6 @@ namespace Emby.Server.Implementations.Data
private SQLiteDatabaseConnection WriteConnection;
- private readonly BlockingCollection<SQLiteDatabaseConnection> ReadConnectionPool = new BlockingCollection<SQLiteDatabaseConnection>();
-
static BaseSqliteRepository()
{
ThreadSafeMode = raw.sqlite3_threadsafe();
@@ -43,70 +39,37 @@ namespace Emby.Server.Implementations.Data
private string _defaultWal;
- protected async Task CreateConnections()
+ protected ManagedConnection GetConnection(bool isReadOnly = false)
{
- await WriteLock.WaitAsync().ConfigureAwait(false);
-
- try
+ WriteLock.Wait();
+ if (WriteConnection != null)
{
- if (WriteConnection == null)
- {
- WriteConnection = SQLite3.Open(
- DbFilePath,
- DefaultConnectionFlags | ConnectionFlags.Create | ConnectionFlags.ReadWrite,
- null);
- }
+ return new ManagedConnection(WriteConnection, WriteLock);
+ }
- if (string.IsNullOrWhiteSpace(_defaultWal))
- {
- _defaultWal = WriteConnection.Query("PRAGMA journal_mode").SelectScalarString().First();
+ WriteConnection = SQLite3.Open(
+ DbFilePath,
+ DefaultConnectionFlags | ConnectionFlags.Create | ConnectionFlags.ReadWrite,
+ null);
- Logger.LogInformation("Default journal_mode for {0} is {1}", DbFilePath, _defaultWal);
- }
- if (EnableTempStoreMemory)
- {
- WriteConnection.Execute("PRAGMA temp_store = memory");
- }
- else
- {
- WriteConnection.Execute("PRAGMA temp_store = file");
- }
- }
- catch
+ if (string.IsNullOrWhiteSpace(_defaultWal))
{
+ _defaultWal = WriteConnection.Query("PRAGMA journal_mode").SelectScalarString().First();
- throw;
- }
- finally
- {
- WriteLock.Release();
+ Logger.LogInformation("Default journal_mode for {0} is {1}", DbFilePath, _defaultWal);
}
- // Add one reading connection for each thread
- int threads = System.Environment.ProcessorCount;
- for (int i = 0; i <= threads; i++)
- {
- ReadConnectionPool.Add(SQLite3.Open(DbFilePath, DefaultConnectionFlags | ConnectionFlags.ReadOnly, null));
- }
- }
-
- protected ManagedConnection GetConnection(bool isReadOnly = false)
- {
- if (isReadOnly)
+ if (EnableTempStoreMemory)
{
- return new ManagedConnection(ReadConnectionPool.Take(), ReadConnectionPool);
+ WriteConnection.Execute("PRAGMA temp_store = memory");
}
else
{
- if (WriteConnection == null)
- {
- throw new InvalidOperationException("Can't access the write connection at this time.");
- }
-
- WriteLock.Wait();
- return new ManagedConnection(WriteConnection, WriteLock);
+ WriteConnection.Execute("PRAGMA temp_store = file");
}
+
+ return new ManagedConnection(WriteConnection, WriteLock);
}
public IStatement PrepareStatement(ManagedConnection connection, string sql)
@@ -217,14 +180,11 @@ namespace Emby.Server.Implementations.Data
WriteLock.Release();
}
- foreach (var i in ReadConnectionPool)
- {
- i.Dispose();
- }
-
- ReadConnectionPool.Dispose();
+ WriteLock.Dispose();
}
+ WriteConnection = null;
+
_disposed = true;
}