Browse Source

added comments for the WeakReference stuff

pull/475/head
Anton Firszov 8 years ago
parent
commit
4d915b6e31
  1. 4
      src/ImageSharp/Memory/ArrayPoolMemoryManager.Buffer{T}.cs
  2. 13
      tests/ImageSharp.Tests/Memory/ArrayPoolMemoryManagerTests.cs
  3. 2
      tests/ImageSharp.Tests/Memory/BufferAreaTests.cs

4
src/ImageSharp/Memory/ArrayPoolMemoryManager.Buffer{T}.cs

@ -25,6 +25,10 @@ namespace SixLabors.ImageSharp.Memory
/// <summary>
/// A weak reference to the source pool.
/// </summary>
/// <remarks>
/// By using a weak reference here, we are making sure that array pools and their retained arrays are always GC-ed
/// after a call to <see cref="ArrayPoolMemoryManager.ReleaseRetainedResources"/>, regardless of having buffer instances still being in use.
/// </remarks>
private WeakReference<ArrayPool<byte>> sourcePoolReference;
public Buffer(byte[] data, int length, ArrayPool<byte> sourcePool)

13
tests/ImageSharp.Tests/Memory/ArrayPoolMemoryManagerTests.cs

@ -127,14 +127,21 @@ namespace SixLabors.ImageSharp.Tests.Memory
}
}
[Fact]
public void ReleaseRetainedResources_ReplacesInnerArrayPool()
[Theory]
[InlineData(false)]
[InlineData(true)]
public void ReleaseRetainedResources_ReplacesInnerArrayPool(bool keepBufferAlive)
{
IBuffer<int> buffer = this.MemoryManager.Allocate<int>(32);
ref int ptrToPrev0 = ref buffer.Span.DangerousGetPinnableReference();
buffer.Dispose();
if (!keepBufferAlive)
{
buffer.Dispose();
}
this.MemoryManager.ReleaseRetainedResources();
buffer = this.MemoryManager.Allocate<int>(32);
Assert.False(Unsafe.AreSame(ref ptrToPrev0, ref buffer.DangerousGetPinnableReference()));

2
tests/ImageSharp.Tests/Memory/BufferAreaTests.cs

@ -104,7 +104,7 @@ namespace SixLabors.ImageSharp.Tests.Memory
{
BufferArea<int> area0 = buffer.GetArea(6, 8, 10, 10);
ref int r = ref area0.GetReferenceToOrigo();
ref int r = ref area0.GetReferenceToOrigin();
int expected = buffer[6, 8];
Assert.Equal(expected, r);

Loading…
Cancel
Save