public IncomingBuffer IncomingStart(int minimumSize) { lock (_sync) { if (_tail != null && minimumSize <= _tail.Data.Offset + _tail.Data.Count - _tail.End) { _pinned = _tail; var data = new ArraySegment <byte>(_pinned.Data.Array, _pinned.End, _pinned.Data.Offset + _pinned.Data.Count - _pinned.End); var dataPtr = _pinned.Pin(); return(new IncomingBuffer { Data = data, DataPtr = dataPtr, }); } } _pinned = _memory.Lease(minimumSize); return(new IncomingBuffer { Data = _pinned.Data, DataPtr = _pinned.Pin() }); }