public void Dispose()
 {
     try
     {
         _env._tempPagesPool.Enqueue(_tmp);
     }
     catch (Exception)
     {
         _tmp.Dispose();
         throw;
     }
 }
Esempio n. 2
0
 public unsafe void Dispose()
 {
     try
     {
         if (_env.Options.EncryptionEnabled)
         {
             Sodium.ZeroMemory(_tmp.TempPagePointer, _tmp.PageSize);
         }
         _env._tempPagesPool.Enqueue(_tmp);
     }
     catch (Exception)
     {
         _tmp.Dispose();
         throw;
     }
 }
        public IDisposable GetTemporaryPage(Transaction tx, out TemporaryPage tmp)
        {
            if (tx.Flags != TransactionFlags.ReadWrite)
            {
                throw new ArgumentException("Temporary pages are only available for write transactions");
            }
            if (_tempPagesPool.Count > 0)
            {
                tmp = _tempPagesPool.Dequeue();
                return(tmp.ReturnTemporaryPageToPool);
            }

            tmp = new TemporaryPage();
            try
            {
                return(tmp.ReturnTemporaryPageToPool = new ReturnTemporaryPageToPool(this, tmp));
            }
            catch (Exception)
            {
                tmp.Dispose();
                throw;
            }
        }