From 82a0f0e476a6c0e5bee816b68832d2cc12322572 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Mon, 10 Feb 2020 12:44:30 +0100 Subject: [PATCH] Merge pull request #3537 from MarchingCube/fix-weak-event-manager-compact WeakEventHandlerManager: Ensure that weak refs with collected refs are compacted as well. --- src/Avalonia.Base/Utilities/WeakEventHandlerManager.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Base/Utilities/WeakEventHandlerManager.cs b/src/Avalonia.Base/Utilities/WeakEventHandlerManager.cs index 37e25d0fac..aca08f5259 100644 --- a/src/Avalonia.Base/Utilities/WeakEventHandlerManager.cs +++ b/src/Avalonia.Base/Utilities/WeakEventHandlerManager.cs @@ -183,11 +183,16 @@ namespace Avalonia.Utilities for (int c = 0; c < _count; c++) { var r = _data[c]; + + TSubscriber target = null; + + r.Subscriber?.TryGetTarget(out target); + //Mark current index as first empty - if (r.Subscriber == null && empty == -1) + if (target == null && empty == -1) empty = c; //If current element isn't null and we have an empty one - if (r.Subscriber != null && empty != -1) + if (target != null && empty != -1) { _data[c] = default; _data[empty] = r;