@@ -25,22 +25,33 @@ internal static class EncodingHelper
25
25
{
26
26
public readonly struct DisposableSegment : IDisposable
27
27
{
28
- private IDisposable DisposableData { get ; }
28
+ private bool DisposeRentedBuffer { get ; }
29
+ private ThreadStaticBuffer . RentedBuffer RentedBuffer { get ; }
29
30
public ArraySegment < byte > Segment { get ; }
30
31
31
- public DisposableSegment ( IDisposable disposableData , ArraySegment < byte > segment )
32
+ public DisposableSegment ( ThreadStaticBuffer . RentedBuffer rentedBuffer , ArraySegment < byte > segment )
32
33
{
33
- DisposableData = disposableData ;
34
+ DisposeRentedBuffer = true ;
35
+ RentedBuffer = rentedBuffer ;
36
+ Segment = segment ;
37
+ }
38
+
39
+ public DisposableSegment ( ArraySegment < byte > segment )
40
+ {
41
+ DisposeRentedBuffer = false ;
34
42
Segment = segment ;
35
43
}
36
44
37
45
public void Dispose ( )
38
46
{
39
- DisposableData ? . Dispose ( ) ;
47
+ if ( DisposeRentedBuffer )
48
+ {
49
+ RentedBuffer . Dispose ( ) ;
50
+ }
40
51
}
41
52
}
42
53
43
- private static readonly ArraySegment < byte > __emptySegment = new ArraySegment < byte > ( new byte [ 0 ] ) ;
54
+ private static readonly ArraySegment < byte > __emptySegment = new ( new byte [ 0 ] ) ;
44
55
45
56
public static DisposableSegment GetBytesUsingThreadStaticBuffer ( this Encoding encoding , string value )
46
57
{
@@ -57,7 +68,7 @@ public static DisposableSegment GetBytesUsingThreadStaticBuffer(this Encoding en
57
68
var length = value . Length ;
58
69
if ( length == 0 )
59
70
{
60
- return new DisposableSegment ( null , __emptySegment ) ;
71
+ return new DisposableSegment ( __emptySegment ) ;
61
72
}
62
73
63
74
var maxSize = encoding . GetMaxByteCount ( length ) ;
0 commit comments