/// <summary> /// Dequeue stack and dispose database on empty stack /// </summary> private void CloseDatabase() { lock (_mutex) { _stack--; if (_stack == 0) { _engine.Dispose(); _engine = null; _mutex.ReleaseMutex(); } } }
/// <summary> /// Open database in safe mode /// </summary> private void OpenDatabase(bool @readonly) { lock (_locker) { _stack++; if (_stack == 1) { open(); } // change from read-only to read-write else if (_settings.ReadOnly == true && @readonly == false && _engine != null) { _engine.Dispose(); open(); } } void open() { try { _locker.AcquireLock(@readonly ? LockMode.Read : LockMode.Write, () => { _settings.ReadOnly = @readonly; _engine = new LiteEngine(_settings); }); } catch { if (_locker.IsLocked) { _locker.ReleaseLock(); } _stack = 0; throw; } } }
/// <summary> /// Open engine as writable and stack operation /// </summary> private void OpenWrite() { lock (_locker) { _stack++; if (_stack == 1) { _locker.AcquireWriterLock(); _settings.ReadOnly = false; _engine = new LiteEngine(_settings); } else if (_settings.ReadOnly) { // if database already open in readonly mode, change to writeable mode _settings.ReadOnly = false; _engine.Dispose(); _engine = new LiteEngine(_settings); } } }
public override void End() { _db.Dispose(); }
public bool Close() { _engine.Dispose(); return(true); }