protected override void Dispose(bool disposing) { var length = Interlocked.Exchange(ref _length, -1); var buffer = _buffer; _buffer = null; if (buffer != null && length > 0 && _disposer != null) { _disposer.DisposeOf((IntPtr)buffer, this); } base.Dispose(disposing); }