| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | using MediaBrowser.Model.Logging;using System;using System.Threading;namespace MediaBrowser.Server.Implementations.Persistence{    public abstract class BaseSqliteRepository : IDisposable    {        protected readonly SemaphoreSlim WriteLock = new SemaphoreSlim(1, 1);        protected ILogger Logger;        protected BaseSqliteRepository(ILogManager logManager)        {            Logger = logManager.GetLogger(GetType().Name);        }        public void Dispose()        {            Dispose(true);            GC.SuppressFinalize(this);        }        private readonly object _disposeLock = new object();        /// <summary>        /// Releases unmanaged and - optionally - managed resources.        /// </summary>        /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>        protected virtual void Dispose(bool dispose)        {            if (dispose)            {                try                {                    lock (_disposeLock)                    {                        WriteLock.Wait();                        CloseConnection();                    }                }                catch (Exception ex)                {                    Logger.ErrorException("Error disposing database", ex);                }            }        }        protected virtual void DisposeInternal()        {        }        protected abstract void CloseConnection();    }}
 |