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(); }
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); } }
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); } }