public virtual void Close(ShutdownMode mode)
 {
     lock (_mainContainer.Lock())
     {
         IEnumerator entryIter = _fileName2Container.Iterator();
         while (entryIter.MoveNext())
         {
             IEntry4 hashEntry = (IEntry4)entryIter.Current;
             ClientTransactionPool.ContainerCount containerCount = (ClientTransactionPool.ContainerCount
                                                                    )hashEntry.Value();
             try
             {
                 containerCount.Close(mode);
             }
             catch (Exception t)
             {
                 // If we are in fatal ShutdownMode close will
                 // throw but we want to continue shutting down
                 // all entries.
                 Sharpen.Runtime.PrintStackTrace(t);
             }
         }
         _closed = true;
     }
 }
 public virtual void Release(ShutdownMode mode, Transaction transaction, bool rollbackOnClose
                             )
 {
     lock (_mainContainer.Lock())
     {
         ClientTransactionPool.ContainerCount entry = (ClientTransactionPool.ContainerCount
                                                       )_transaction2Container.Get(transaction);
         entry.Container().CloseTransaction(transaction, false, mode.IsFatal() ? false : rollbackOnClose
                                            );
         _transaction2Container.Remove(transaction);
         entry.Release();
         if (entry.IsEmpty())
         {
             _fileName2Container.Remove(entry.FileName());
             try
             {
                 entry.Close(mode);
             }
             catch (Exception t)
             {
                 // If we are in fatal ShutdownMode close will
                 // throw but we want to continue shutting down
                 // all entries.
                 Sharpen.Runtime.PrintStackTrace(t);
             }
         }
     }
 }