Found a bug where the SequenceSegment<T>.Memory was being set to default prior to the RefCountedSegment.ReleaseImpl() method invocation. This has the effect of the implementation attempting to return default Memory<byte>.Empty array which is discarded by the pool. The GC obviously picks this up in the end, but it prevents the pool from reusing the memory.
The fix for this is changing the order of the setting of the memory to default and the ReleaseImpl invocation.
Added a test for this fix. I encountered one failure of BufferWriterTests.BufferWriterDoesNotLeak() but I could not reproduce the onetime failure. Unless I'm missing something, I don't see how this modification would cause the test failure.
Found a bug where the
SequenceSegment<T>.Memory
was being set todefault
prior to theRefCountedSegment.ReleaseImpl()
method invocation. This has the effect of the implementation attempting to return defaultMemory<byte>.Empty
array which is discarded by the pool. The GC obviously picks this up in the end, but it prevents the pool from reusing the memory.The fix for this is changing the order of the setting of the memory to default and the
ReleaseImpl
invocation.Added a test for this fix. I encountered one failure of
BufferWriterTests.BufferWriterDoesNotLeak()
but I could not reproduce the onetime failure. Unless I'm missing something, I don't see how this modification would cause the test failure.