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.cs93
1 files changed, 55 insertions, 38 deletions
diff --git a/Emby.Server.Implementations/Data/BaseSqliteRepository.cs b/Emby.Server.Implementations/Data/BaseSqliteRepository.cs
index a34c90cb4..d207c8d4f 100644
--- a/Emby.Server.Implementations/Data/BaseSqliteRepository.cs
+++ b/Emby.Server.Implementations/Data/BaseSqliteRepository.cs
@@ -108,37 +108,49 @@ namespace Emby.Server.Implementations.Data
var db = SQLite3.Open(DbFilePath, connectionFlags, null);
- if (string.IsNullOrWhiteSpace(_defaultWal))
+ try
{
- _defaultWal = db.Query("PRAGMA journal_mode").SelectScalarString().First();
+ if (string.IsNullOrWhiteSpace(_defaultWal))
+ {
+ _defaultWal = db.Query("PRAGMA journal_mode").SelectScalarString().First();
- Logger.Info("Default journal_mode for {0} is {1}", DbFilePath, _defaultWal);
- }
+ Logger.Info("Default journal_mode for {0} is {1}", DbFilePath, _defaultWal);
+ }
- var queries = new List<string>
- {
- //"PRAGMA cache size=-10000"
- //"PRAGMA read_uncommitted = true",
- "PRAGMA synchronous=Normal"
- };
+ var queries = new List<string>
+ {
+ //"PRAGMA cache size=-10000"
+ //"PRAGMA read_uncommitted = true",
+ "PRAGMA synchronous=Normal"
+ };
- if (CacheSize.HasValue)
- {
- queries.Add("PRAGMA cache_size=" + CacheSize.Value.ToString(CultureInfo.InvariantCulture));
- }
+ if (CacheSize.HasValue)
+ {
+ queries.Add("PRAGMA cache_size=" + CacheSize.Value.ToString(CultureInfo.InvariantCulture));
+ }
- if (EnableTempStoreMemory)
- {
- queries.Add("PRAGMA temp_store = memory");
+ if (EnableTempStoreMemory)
+ {
+ queries.Add("PRAGMA temp_store = memory");
+ }
+ else
+ {
+ queries.Add("PRAGMA temp_store = file");
+ }
+
+ foreach (var query in queries)
+ {
+ db.Execute(query);
+ }
}
- else
+ catch
{
- queries.Add("PRAGMA temp_store = file");
- }
+ using (db)
+ {
- foreach (var query in queries)
- {
- db.Execute(query);
+ }
+
+ throw;
}
_connection = new ManagedConnection(db, false);
@@ -265,29 +277,34 @@ namespace Emby.Server.Implementations.Data
{
if (dispose)
{
- try
+ DisposeConnection();
+ }
+ }
+
+ private void DisposeConnection()
+ {
+ try
+ {
+ lock (_disposeLock)
{
- lock (_disposeLock)
+ using (WriteLock.Write())
{
- using (WriteLock.Write())
+ if (_connection != null)
{
- if (_connection != null)
+ using (_connection)
{
- using (_connection)
- {
-
- }
- _connection = null;
+ _connection.Close();
}
-
- CloseConnection();
+ _connection = null;
}
+
+ CloseConnection();
}
}
- catch (Exception ex)
- {
- Logger.ErrorException("Error disposing database", ex);
- }
+ }
+ catch (Exception ex)
+ {
+ Logger.ErrorException("Error disposing database", ex);
}
}