Pipelines.Sockets.Unofficial icon indicating copy to clipboard operation
Pipelines.Sockets.Unofficial copied to clipboard

Memory Leak: BufferWriter Array Return Failure

Open DJGosnell opened this issue 1 year ago • 1 comments

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.

DJGosnell avatar Jul 03 '23 17:07 DJGosnell

Interesting catch. Will read carefully asap

mgravell avatar Jul 03 '23 21:07 mgravell