From c792b03279d45e172eb494270c210d6f6d4e2ae3 Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Sun, 25 Feb 2018 20:28:39 +0100 Subject: [PATCH] using WeakReference in ArrayPoolMemoryManager.Buffer --- .../Memory/ArrayPoolMemoryManager.Buffer{T}.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/ImageSharp/Memory/ArrayPoolMemoryManager.Buffer{T}.cs b/src/ImageSharp/Memory/ArrayPoolMemoryManager.Buffer{T}.cs index 78e275e8c..65a91bfdf 100644 --- a/src/ImageSharp/Memory/ArrayPoolMemoryManager.Buffer{T}.cs +++ b/src/ImageSharp/Memory/ArrayPoolMemoryManager.Buffer{T}.cs @@ -16,13 +16,13 @@ namespace SixLabors.ImageSharp.Memory { private readonly int length; - private readonly ArrayPool sourcePool; + private WeakReference> sourcePoolReference; public Buffer(byte[] data, int length, ArrayPool sourcePool) { this.Data = data; this.length = length; - this.sourcePool = sourcePool; + this.sourcePoolReference = new WeakReference>(sourcePool); } protected byte[] Data { get; private set; } @@ -31,12 +31,17 @@ namespace SixLabors.ImageSharp.Memory public void Dispose() { - if (this.Data == null) + if (this.Data == null || this.sourcePoolReference == null) { return; } - this.sourcePool.Return(this.Data); + if (this.sourcePoolReference.TryGetTarget(out ArrayPool pool)) + { + pool.Return(this.Data); + } + + this.sourcePoolReference = null; this.Data = null; } }