Пример #1
0
        /// <summary>
        /// Closes the storage
        /// </summary>
        public void Close()
        {
            if (transactionLevel > 0)
            {
                InternalRollbackTransaction();
                throw new StorageException("Unable to close storage while transaction is pending");
            }

            if (!isClosed)
            {
                lock (openedStreams)
                {
                    //cacheCleanupTimer.Dispose();
                    //cacheCleanupTimer = null;

                    RollbackTransaction();

                    // Cache stream table into empty space stream
                    MasterStream.Flush();
                    MasterStream.Close();
                    openedStreams.Clear();
                    streamsChangedDuringTransaction.Clear();
                    isClosed = true;
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Commits a transaction
        /// </summary>
        public void CommitTransaction()
        {
            try
            {
                CheckClosed();
                if (transactionLevel == 1)
                {
                    NotifyTransactionChanging(TransactionStateChangeType.Commit);

                    SaveChanges();
                    if (transactionStream != null)
                    {
                        transactionStream.EndTransaction();
                    }

                    streamsCreatedDuringTransaction.Clear();
                    MasterStream.Flush();
                    MasterStream.CommitTransaction();
                    Statistics.TransactionsCommited++;
                }

                if (transactionLevel > 0)
                {
                    transactionLevel--;

                    if (transactionLevel == 0)
                    {
                        NotifyTransactionChanged(TransactionStateChangeType.Commit);
                    }
                }
            }
            catch
            {
                InternalRollbackTransaction();
                throw;
            }
        }