From c0f3d2f01ab3df71428286c8c72e3d141310c4bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1vid=20Karnok?= Date: Sat, 26 May 2018 16:50:31 +0200 Subject: [PATCH] 4.x: Fix ActivePlan crashing with self-joins --- Rx.NET/Source/src/System.Reactive/Joins/ActivePlan.cs | 7 +++++-- .../Tests/Linq/Observable/WhenTest.cs | 10 ++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Rx.NET/Source/src/System.Reactive/Joins/ActivePlan.cs b/Rx.NET/Source/src/System.Reactive/Joins/ActivePlan.cs index 0fc5de2700..4327e47434 100644 --- a/Rx.NET/Source/src/System.Reactive/Joins/ActivePlan.cs +++ b/Rx.NET/Source/src/System.Reactive/Joins/ActivePlan.cs @@ -14,7 +14,10 @@ internal abstract class ActivePlan protected void AddJoinObserver(IJoinObserver joinObserver) { - joinObservers.Add(joinObserver, joinObserver); + if (!joinObservers.ContainsKey(joinObserver)) + { + joinObservers.Add(joinObserver, joinObserver); + } } protected void Dequeue() @@ -1432,4 +1435,4 @@ internal override void Match() } } } -} \ No newline at end of file +} diff --git a/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/WhenTest.cs b/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/WhenTest.cs index 044f1e37ba..b3108e9247 100644 --- a/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/WhenTest.cs +++ b/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/WhenTest.cs @@ -223,5 +223,15 @@ private IEnumerable> GetPlans(Exception ex) yield break; } + [Fact] + public void SameSource() + { + var source = Observable.Range(1, 5); + + var list = Observable.When(source.And(source).Then((a, b) => a + b)) + .ToList().First(); + + Assert.Equal(new List() { 2, 4, 6, 8, 10 }, list); + } } }