Example #1
0
        /// <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();
                }
            }
        }
Example #2
0
        /// <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;
                }
            }
        }
Example #3
0
        /// <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();
 }
Example #5
0
 public bool Close()
 {
     _engine.Dispose();
     return(true);
 }