From 4c1ac312e55ebddb3922a66df0c7b6c1a0ac47ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1vid=20Karnok?= Date: Sat, 28 Sep 2019 15:35:24 +0200 Subject: [PATCH] Fix delay(selector) NPE on immediate emissions --- .../src/System.Reactive/Linq/Observable/Delay.cs | 2 +- .../Tests/Linq/Observable/DelayTest.cs | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Rx.NET/Source/src/System.Reactive/Linq/Observable/Delay.cs b/Rx.NET/Source/src/System.Reactive/Linq/Observable/Delay.cs index d9ad920373..d0342a7cdb 100644 --- a/Rx.NET/Source/src/System.Reactive/Linq/Observable/Delay.cs +++ b/Rx.NET/Source/src/System.Reactive/Linq/Observable/Delay.cs @@ -657,7 +657,7 @@ public override void OnCompleted() lock (_gate) { _atEnd = true; - _subscription.Dispose(); + Disposable.TryDispose(ref _subscription); CheckDone(); } diff --git a/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/DelayTest.cs b/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/DelayTest.cs index fa9a6f8efc..94255cf550 100644 --- a/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/DelayTest.cs +++ b/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/DelayTest.cs @@ -1813,6 +1813,17 @@ public void Delay_LongRunning_CancelLate() e.WaitOne(); } + [Fact] + public void Delay_Selector_Immediate() + { + var result = 0; + var source = Observable.Return(1); + var delayed = source.Delay(_ => Observable.Return(2)); + delayed.Subscribe(v => result = v); + + Assert.Equal(1, result); + } + private class MyLongRunning2 : LocalScheduler, ISchedulerLongRunning { private ManualResetEvent _start;