aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Persistence/BaseSqliteRepository.cs
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2016-02-11 13:41:22 -0500
committerLuke <luke.pulverenti@gmail.com>2016-02-11 13:41:22 -0500
commit4a1d01be030e5ffb4e367597c7beabaa4e4da887 (patch)
treec42dfd5f233e5eafc560c5bc1a60a2edb1b574cd /MediaBrowser.Server.Implementations/Persistence/BaseSqliteRepository.cs
parent46a6194516d0445da943ead5a31b72bb25eb6663 (diff)
parent9e8d35dadc2859d39c3daab98458fd9d1be03865 (diff)
Merge pull request #1441 from MediaBrowser/dev
merge from dev
Diffstat (limited to 'MediaBrowser.Server.Implementations/Persistence/BaseSqliteRepository.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/BaseSqliteRepository.cs38
1 files changed, 38 insertions, 0 deletions
diff --git a/MediaBrowser.Server.Implementations/Persistence/BaseSqliteRepository.cs b/MediaBrowser.Server.Implementations/Persistence/BaseSqliteRepository.cs
index cac112b6c..395907844 100644
--- a/MediaBrowser.Server.Implementations/Persistence/BaseSqliteRepository.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/BaseSqliteRepository.cs
@@ -1,6 +1,8 @@
using MediaBrowser.Model.Logging;
using System;
+using System.Data;
using System.Threading;
+using System.Threading.Tasks;
namespace MediaBrowser.Server.Implementations.Persistence
{
@@ -14,12 +16,48 @@ namespace MediaBrowser.Server.Implementations.Persistence
Logger = logManager.GetLogger(GetType().Name);
}
+ private bool _disposed;
+ protected void CheckDisposed()
+ {
+ if (_disposed)
+ {
+ throw new ObjectDisposedException(GetType().Name + " has been disposed and cannot be accessed.");
+ }
+ }
+
public void Dispose()
{
+ _disposed = true;
Dispose(true);
GC.SuppressFinalize(this);
}
+ protected async Task Vacuum(IDbConnection connection)
+ {
+ CheckDisposed();
+
+ await WriteLock.WaitAsync().ConfigureAwait(false);
+
+ try
+ {
+ using (var cmd = connection.CreateCommand())
+ {
+ cmd.CommandText = "vacuum";
+ cmd.ExecuteNonQuery();
+ }
+ }
+ catch (Exception e)
+ {
+ Logger.ErrorException("Failed to vacuum:", e);
+
+ throw;
+ }
+ finally
+ {
+ WriteLock.Release();
+ }
+ }
+
private readonly object _disposeLock = new object();
/// <summary>