protected virtual void Dispose(bool disposing) { IoCompletionPort completionPort = Interlocked.Exchange(ref _ioCompletionPort, null); if (completionPort != null) { lock (_completionPortLock) ReleaseIoCompletionPort(); } }
private static IoCompletionPort AcquireIoCompletionPort() { System.Diagnostics.Debug.Assert(Monitor.IsEntered(_completionPortLock)); if (_completionPortCount == 0) { _completionPort = new IoCompletionPort(); } _completionPortCount++; return(_completionPort); }
private static void ReleaseIoCompletionPort() { System.Diagnostics.Debug.Assert(Monitor.IsEntered(_completionPortLock)); System.Diagnostics.Debug.Assert(_completionPortCount > 0); if (_completionPortCount == 1) { _completionPort.Dispose(); _completionPort = null; } _completionPortCount--; }