/// <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; } } }
/// <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; } }