From 8a740699325c77d6bfda5d51c8c14f32f514e035 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Mon, 18 May 2020 18:53:04 +0200 Subject: [PATCH] Fix leak in PropertySetterBindingInstance. `_subscription` was being used twice: for the subscription from the `PropertySetterBindingInstance` to the control (line 69) and from the subscription to the source binding to the `PropertySetterBindingInstance` (line 151). --- .../Styling/PropertySetterBindingInstance.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Styling/Styling/PropertySetterBindingInstance.cs b/src/Avalonia.Styling/Styling/PropertySetterBindingInstance.cs index f975862892..e177993d13 100644 --- a/src/Avalonia.Styling/Styling/PropertySetterBindingInstance.cs +++ b/src/Avalonia.Styling/Styling/PropertySetterBindingInstance.cs @@ -24,6 +24,7 @@ namespace Avalonia.Styling private BindingValue _value; private IDisposable? _subscription; private IDisposable? _subscriptionTwoWay; + private IDisposable? _innerSubscription; private bool _isActive; public PropertySetterBindingInstance( @@ -121,6 +122,9 @@ namespace Avalonia.Styling sub.Dispose(); } + _innerSubscription?.Dispose(); + _innerSubscription = null; + base.Dispose(); } @@ -144,13 +148,13 @@ namespace Avalonia.Styling protected override void Subscribed() { - _subscription = _binding.Observable.Subscribe(_inner); + _innerSubscription = _binding.Observable.Subscribe(_inner); } protected override void Unsubscribed() { - _subscription?.Dispose(); - _subscription = null; + _innerSubscription?.Dispose(); + _innerSubscription = null; } private void PublishNext()