예제 #1
0
파일: DiskCache.cs 프로젝트: gabilic/Oplan
 private void WriteRecord(DiskCache.DeferredWriteRecord record)
 {
     try
     {
         long increment;
         this.presentDiskDispatcher.WriteObject(record.result, record.freshPath, out increment);
         Monitor.Enter(this);
         try
         {
             this.IncrementFreshCount(increment);
         }
         finally
         {
             Monitor.Exit(this);
         }
     }
     catch (WriteObjectFailedException ex)
     {
         D.Sayf(1, "disk cache write failed; ignoring: {0}", new object[]
         {
             ex
         });
     }
     record.Dispose();
 }
예제 #2
0
파일: DiskCache.cs 프로젝트: gabilic/Oplan
 private void ScheduleDeferredWrite(Present result, string freshPath, string debugOriginInfo)
 {
     Monitor.Enter(this);
     try
     {
         DiskCache.DeferredWriteRecord item = new DiskCache.DeferredWriteRecord(result, freshPath, debugOriginInfo);
         this.deferredWriteQueue.Enqueue(item);
         this.writeQueueNonEmptyEvent.Set();
     }
     finally
     {
         Monitor.Exit(this);
     }
 }
예제 #3
0
파일: DiskCache.cs 프로젝트: gabilic/Oplan
 private void DeferredWriteThread()
 {
     while (!this.disposed)
     {
         this.writeQueueNonEmptyEvent.WaitOne();
         int num = 0;
         while (!this.disposed)
         {
             DiskCache.DeferredWriteRecord deferredWriteRecord = null;
             Monitor.Enter(this);
             try
             {
                 if (this.deferredWriteQueue.Count > 0)
                 {
                     deferredWriteRecord = this.deferredWriteQueue.Dequeue();
                 }
             }
             finally
             {
                 Monitor.Exit(this);
             }
             if (deferredWriteRecord == null)
             {
                 break;
             }
             this.WriteRecord(deferredWriteRecord);
             num++;
         }
     }
     Monitor.Enter(this);
     try
     {
         this.writeQueueNonEmptyEvent.Close();
         this.writeQueueNonEmptyEvent = null;
     }
     finally
     {
         Monitor.Exit(this);
     }
 }
예제 #4
0
		private void ScheduleDeferredWrite(Present result, string freshPath, string debugOriginInfo)
		{
			Monitor.Enter(this);
			try
			{
				DiskCache.DeferredWriteRecord item = new DiskCache.DeferredWriteRecord(result, freshPath, debugOriginInfo);
				this.deferredWriteQueue.Enqueue(item);
				this.writeQueueNonEmptyEvent.Set();
			}
			finally
			{
				Monitor.Exit(this);
			}
		}