diff options
author | David Karlaš <david.karlas@gmail.com> | 2020-09-10 11:51:10 +0300 |
---|---|---|
committer | David Karlaš <david.karlas@gmail.com> | 2020-09-10 11:51:10 +0300 |
commit | efe64a425f9f60776a4feaf52375cbfe1f4720db (patch) | |
tree | 6d9d408490f6a0e4c88f965ebee8ca34b61a8b9a | |
parent | 2a1b772c42cb3972708cfdc5ca28cc60d1836641 (diff) |
Fix memory leakdev/davkar/fixMemoryLeak
-rw-r--r-- | Xamarin.PropertyEditing/AsyncWorkQueue.cs | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/Xamarin.PropertyEditing/AsyncWorkQueue.cs b/Xamarin.PropertyEditing/AsyncWorkQueue.cs index 9d47e4a..2956eef 100644 --- a/Xamarin.PropertyEditing/AsyncWorkQueue.cs +++ b/Xamarin.PropertyEditing/AsyncWorkQueue.cs @@ -16,15 +16,15 @@ namespace Xamarin.PropertyEditing var worker = new AsyncValueWorker (requester, this); this.workers.AddLast (worker.Node); - if (this.workers.Count == 1 || ReferenceEquals (requester, this.activeRequester)) { + if (this.workers.Count == 1 || (this.activeRequester.TryGetTarget (out var target) && ReferenceEquals (requester, target))) { worker.Completion.SetResult (worker); - this.activeRequester = requester; + this.activeRequester.SetTarget (requester); } return worker.Completion.Task; } - private object activeRequester; + private WeakReference<object> activeRequester; private readonly LinkedList<AsyncValueWorker> workers = new LinkedList<AsyncValueWorker>(); private void CompleteWork (AsyncValueWorker worker) @@ -63,7 +63,7 @@ namespace Xamarin.PropertyEditing this.workers.Remove (worker); if (toFree != null) { - this.activeRequester = toFree.Requester; + this.activeRequester.SetTarget (toFree.Requester); toFree.Completion.SetResult (toFree); if (related != null) { |