diff options
author | E.Z. Hart <hartez@users.noreply.github.com> | 2017-01-24 15:25:44 -0700 |
---|---|---|
committer | Rui Marinho <me@ruimarinho.net> | 2017-01-24 22:25:44 +0000 |
commit | ebb24b7edd2b297f259eadfa4686e03c96504f1d (patch) | |
tree | 2f9934e501f366707a72994acb3bf354f9a97606 | |
parent | 4b19d49aa228330af37cee8c4d4fe7097eaf608d (diff) | |
download | xamarin-forms-ebb24b7edd2b297f259eadfa4686e03c96504f1d.tar.gz xamarin-forms-ebb24b7edd2b297f259eadfa4686e03c96504f1d.tar.bz2 xamarin-forms-ebb24b7edd2b297f259eadfa4686e03c96504f1d.zip |
Fix overeager subscription cleanup (#712)
-rw-r--r-- | Xamarin.Forms.Core.UnitTests/MessagingCenterTests.cs | 18 | ||||
-rw-r--r-- | Xamarin.Forms.Core/MessagingCenter.cs | 2 |
2 files changed, 19 insertions, 1 deletions
diff --git a/Xamarin.Forms.Core.UnitTests/MessagingCenterTests.cs b/Xamarin.Forms.Core.UnitTests/MessagingCenterTests.cs index ae16fced..3cd91ed7 100644 --- a/Xamarin.Forms.Core.UnitTests/MessagingCenterTests.cs +++ b/Xamarin.Forms.Core.UnitTests/MessagingCenterTests.cs @@ -319,6 +319,24 @@ namespace Xamarin.Forms.Core.UnitTests Assert.True(success); // TestCallbackSource.SuccessCallback() should be invoked to make success == true } + [Test] + public void MultipleSubscribersOfTheSameClass() + { + var sub1 = new object(); + var sub2 = new object(); + + string args2 = null; + + const string message = "message"; + + MessagingCenter.Subscribe<MessagingCenterTests, string>(sub1, message, (sender, args) => { }); + MessagingCenter.Subscribe<MessagingCenterTests, string>(sub2, message, (sender, args) => args2 = args); + MessagingCenter.Unsubscribe<MessagingCenterTests, string>(sub1, message); + + MessagingCenter.Send(this, message, "Testing"); + Assert.That(args2, Is.EqualTo("Testing"), "unsubscribing sub1 should not unsubscribe sub2"); + } + class TestSubcriber { public void SetSuccess() diff --git a/Xamarin.Forms.Core/MessagingCenter.cs b/Xamarin.Forms.Core/MessagingCenter.cs index 5e60046d..b6a167da 100644 --- a/Xamarin.Forms.Core/MessagingCenter.cs +++ b/Xamarin.Forms.Core/MessagingCenter.cs @@ -205,7 +205,7 @@ namespace Xamarin.Forms var key = new Sender(message, senderType, argType); if (!s_subscriptions.ContainsKey(key)) return; - s_subscriptions[key].RemoveAll(sub => !sub.CanBeRemoved() || sub.Subscriber.Target == subscriber); + s_subscriptions[key].RemoveAll(sub => sub.CanBeRemoved() || sub.Subscriber.Target == subscriber); if (!s_subscriptions[key].Any()) s_subscriptions.Remove(key); } |