diff --git a/src/MongoDB.Bson/IO/EncodingHelper.cs b/src/MongoDB.Bson/IO/EncodingHelper.cs index a7fa16527e3..969ba77a949 100644 --- a/src/MongoDB.Bson/IO/EncodingHelper.cs +++ b/src/MongoDB.Bson/IO/EncodingHelper.cs @@ -25,22 +25,33 @@ internal static class EncodingHelper { public readonly struct DisposableSegment : IDisposable { - private IDisposable DisposableData { get; } + private bool DisposeRentedBuffer { get; } + private ThreadStaticBuffer.RentedBuffer RentedBuffer { get; } public ArraySegment Segment { get; } - public DisposableSegment(IDisposable disposableData, ArraySegment segment) + public DisposableSegment(ThreadStaticBuffer.RentedBuffer rentedBuffer, ArraySegment segment) { - DisposableData = disposableData; + DisposeRentedBuffer = true; + RentedBuffer = rentedBuffer; + Segment = segment; + } + + public DisposableSegment(ArraySegment segment) + { + DisposeRentedBuffer = false; Segment = segment; } public void Dispose() { - DisposableData?.Dispose(); + if (DisposeRentedBuffer) + { + RentedBuffer.Dispose(); + } } } - private static readonly ArraySegment __emptySegment = new ArraySegment(new byte[0]); + private static readonly ArraySegment __emptySegment = new(new byte[0]); public static DisposableSegment GetBytesUsingThreadStaticBuffer(this Encoding encoding, string value) { @@ -57,7 +68,7 @@ public static DisposableSegment GetBytesUsingThreadStaticBuffer(this Encoding en var length = value.Length; if (length == 0) { - return new DisposableSegment(null, __emptySegment); + return new DisposableSegment(__emptySegment); } var maxSize = encoding.GetMaxByteCount(length);