diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Persistence/BaseSqliteRepository.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Persistence/BaseSqliteRepository.cs | 38 |
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> |
