Skip to content

Commit ef922e9

Browse files
committed
Made the ByteArrayWrapper disposable instead of returning the array in a destructor.
1 parent 56bb3d6 commit ef922e9

File tree

8 files changed

+24
-20
lines changed

8 files changed

+24
-20
lines changed

src/Magick.NET/Helpers/ByteArrayWrapper.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
namespace ImageMagick;
1111

12-
internal sealed unsafe class ByteArrayWrapper
12+
internal sealed unsafe class ByteArrayWrapper : IDisposable
1313
{
1414
#if !NETSTANDARD2_0
1515
private static readonly ArrayPool<byte> _pool = ArrayPool<byte>.Create(1024 * 1024 * 64, 128);
@@ -23,7 +23,7 @@ internal sealed unsafe class ByteArrayWrapper
2323
private int _length = 0;
2424

2525
#if !NETSTANDARD2_0
26-
~ByteArrayWrapper()
26+
public void Dispose()
2727
=> _pool.Return(_bytes);
2828

2929
public byte[] GetBytes()
@@ -34,6 +34,10 @@ public byte[] GetBytes()
3434
}
3535

3636
#else
37+
public void Dispose()
38+
{
39+
}
40+
3741
public byte[] GetBytes()
3842
{
3943
ResizeBytes(_length);

src/Magick.NET/MagickImage.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6691,7 +6691,7 @@ public byte[] ToByteArray()
66916691
{
66926692
_settings.FileName = null;
66936693

6694-
var wrapper = new ByteArrayWrapper();
6694+
using var wrapper = new ByteArrayWrapper();
66956695
var writer = new ReadWriteStreamDelegate(wrapper.Write);
66966696
var seeker = new SeekStreamDelegate(wrapper.Seek);
66976697
var teller = new TellStreamDelegate(wrapper.Tell);

src/Magick.NET/MagickImageCollection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1311,7 +1311,7 @@ public byte[] ToByteArray()
13111311
var settings = GetSettings().Clone();
13121312
settings.FileName = null;
13131313

1314-
var wrapper = new ByteArrayWrapper();
1314+
using var wrapper = new ByteArrayWrapper();
13151315
var writer = new ReadWriteStreamDelegate(wrapper.Write);
13161316
var seeker = new SeekStreamDelegate(wrapper.Seek);
13171317
var teller = new TellStreamDelegate(wrapper.Tell);

tests/Magick.NET.Tests/Helpers/ByteArrayWrapperTests/TheGetBytesMethod.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class TheGetBytesMethod
1515
[Fact]
1616
public unsafe void ShouldOnlyReturnTheWrittenBytes()
1717
{
18-
var wrapper = new ByteArrayWrapper();
18+
using var wrapper = new ByteArrayWrapper();
1919
wrapper.Seek(42, (IntPtr)SeekOrigin.Current, IntPtr.Zero);
2020
wrapper.Seek(0, (IntPtr)SeekOrigin.Begin, IntPtr.Zero);
2121

tests/Magick.NET.Tests/Helpers/ByteArrayWrapperTests/TheReadMethod.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class TheReadMethod
1515
[Fact]
1616
public void ShouldReturnZeroWhenBufferIsNull()
1717
{
18-
var wrapper = new ByteArrayWrapper();
18+
using var wrapper = new ByteArrayWrapper();
1919

2020
var count = wrapper.Read(IntPtr.Zero, (UIntPtr)10, IntPtr.Zero);
2121
Assert.Equal(0, count);
@@ -24,7 +24,7 @@ public void ShouldReturnZeroWhenBufferIsNull()
2424
[Fact]
2525
public unsafe void ShouldReturnZeroWhenNothingShouldBeRead()
2626
{
27-
var wrapper = new ByteArrayWrapper();
27+
using var wrapper = new ByteArrayWrapper();
2828

2929
var buffer = new byte[255];
3030
fixed (byte* p = buffer)
@@ -37,7 +37,7 @@ public unsafe void ShouldReturnZeroWhenNothingShouldBeRead()
3737
[Fact]
3838
public unsafe void ShouldReturnTheNumberOfBytesThatCouldBeRead()
3939
{
40-
var wrapper = new ByteArrayWrapper();
40+
using var wrapper = new ByteArrayWrapper();
4141

4242
var offset = 0L;
4343
var buffer = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

tests/Magick.NET.Tests/Helpers/ByteArrayWrapperTests/TheSeekMethod.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class TheSeekMethod
1515
[Fact]
1616
public unsafe void ShouldReturnTheNewOffset()
1717
{
18-
var wrapper = new ByteArrayWrapper();
18+
using var wrapper = new ByteArrayWrapper();
1919

2020
var result = wrapper.Seek(10, (IntPtr)SeekOrigin.Begin, IntPtr.Zero);
2121

@@ -25,7 +25,7 @@ public unsafe void ShouldReturnTheNewOffset()
2525
[Fact]
2626
public unsafe void ShouldNotChangeTheSizeOfTheBytes()
2727
{
28-
var wrapper = new ByteArrayWrapper();
28+
using var wrapper = new ByteArrayWrapper();
2929

3030
var result = wrapper.Seek(10, (IntPtr)SeekOrigin.Begin, IntPtr.Zero);
3131

@@ -35,7 +35,7 @@ public unsafe void ShouldNotChangeTheSizeOfTheBytes()
3535
[Fact]
3636
public unsafe void ShouldReturnTheNewOffsetStartingFromTheCurrentPosition()
3737
{
38-
var wrapper = new ByteArrayWrapper();
38+
using var wrapper = new ByteArrayWrapper();
3939

4040
var buffer = new byte[42];
4141
fixed (byte* p = buffer)
@@ -51,7 +51,7 @@ public unsafe void ShouldReturnTheNewOffsetStartingFromTheCurrentPosition()
5151
[Fact]
5252
public unsafe void ShouldReturnCorrectValueFromEnd()
5353
{
54-
var wrapper = new ByteArrayWrapper();
54+
using var wrapper = new ByteArrayWrapper();
5555

5656
var buffer = new byte[42];
5757
fixed (byte* p = buffer)
@@ -66,7 +66,7 @@ public unsafe void ShouldReturnCorrectValueFromEnd()
6666
[Fact]
6767
public void ShouldReturnMinusOneForInvalidOffset()
6868
{
69-
var wrapper = new ByteArrayWrapper();
69+
using var wrapper = new ByteArrayWrapper();
7070
var result = wrapper.Seek(-10, (IntPtr)SeekOrigin.Current, IntPtr.Zero);
7171

7272
Assert.Equal(-1, result);
@@ -75,7 +75,7 @@ public void ShouldReturnMinusOneForInvalidOffset()
7575
[Fact]
7676
public void ShouldNotChangeOffsetWhenValueIsInvalid()
7777
{
78-
var wrapper = new ByteArrayWrapper();
78+
using var wrapper = new ByteArrayWrapper();
7979
wrapper.Seek(-10, (IntPtr)SeekOrigin.Current, IntPtr.Zero);
8080

8181
Assert.Equal(0, wrapper.Tell(IntPtr.Zero));
@@ -84,7 +84,7 @@ public void ShouldNotChangeOffsetWhenValueIsInvalid()
8484
[Fact]
8585
public void ShouldReturnMinusOneForInvalidWhence()
8686
{
87-
var wrapper = new ByteArrayWrapper();
87+
using var wrapper = new ByteArrayWrapper();
8888
var result = wrapper.Seek(0, (IntPtr)3, IntPtr.Zero);
8989

9090
Assert.Equal(-1, result);

tests/Magick.NET.Tests/Helpers/ByteArrayWrapperTests/TheTellMethod.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class TheTellMethod
1515
[Fact]
1616
public unsafe void ShouldReturnThePositionOfTheWrapper()
1717
{
18-
var wrapper = new ByteArrayWrapper();
18+
using var wrapper = new ByteArrayWrapper();
1919

2020
var buffer = new byte[42];
2121
fixed (byte* p = buffer)
@@ -31,7 +31,7 @@ public unsafe void ShouldReturnThePositionOfTheWrapper()
3131
[Fact]
3232
public unsafe void ShouldReturnTheOffsetOfTheWrapper()
3333
{
34-
var wrapper = new ByteArrayWrapper();
34+
using var wrapper = new ByteArrayWrapper();
3535
wrapper.Seek(42, (IntPtr)SeekOrigin.Current, IntPtr.Zero);
3636

3737
var position = wrapper.Tell(IntPtr.Zero);

tests/Magick.NET.Tests/Helpers/ByteArrayWrapperTests/TheWriteMethod.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class TheWriteMethod
1515
[Fact]
1616
public void ShouldReturnZeroWhenBufferIsNull()
1717
{
18-
var wrapper = new ByteArrayWrapper();
18+
using var wrapper = new ByteArrayWrapper();
1919

2020
var count = wrapper.Write(IntPtr.Zero, (UIntPtr)10, IntPtr.Zero);
2121
Assert.Equal(0, count);
@@ -24,7 +24,7 @@ public void ShouldReturnZeroWhenBufferIsNull()
2424
[Fact]
2525
public unsafe void ShouldReturnZeroWhenNothingShouldBeWritten()
2626
{
27-
var wrapper = new ByteArrayWrapper();
27+
using var wrapper = new ByteArrayWrapper();
2828

2929
var buffer = new byte[255];
3030
fixed (byte* p = buffer)
@@ -37,7 +37,7 @@ public unsafe void ShouldReturnZeroWhenNothingShouldBeWritten()
3737
[Fact]
3838
public unsafe void ShouldReturnTheNumberOfBytesThatCouldBeWritten()
3939
{
40-
var wrapper = new ByteArrayWrapper();
40+
using var wrapper = new ByteArrayWrapper();
4141

4242
var buffer = new byte[5];
4343
fixed (byte* p = buffer)

0 commit comments

Comments
 (0)