aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Persistence/BaseSqliteRepository.cs
diff options
context:
space:
mode:
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>