From 2e41dfe5430f89e3e083561a5c82cac5386b7ed5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1vid=20Karnok?= Date: Sat, 18 Jan 2020 10:41:08 +0100 Subject: [PATCH] Fix crash in Buffer due to empty empty queue in tick --- .../src/System.Reactive/Linq/Observable/Buffer.cs | 7 +++++-- .../Tests/Linq/Observable/BufferTest.cs | 13 +++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Rx.NET/Source/src/System.Reactive/Linq/Observable/Buffer.cs b/Rx.NET/Source/src/System.Reactive/Linq/Observable/Buffer.cs index 2191d58feb..8a2c25657a 100644 --- a/Rx.NET/Source/src/System.Reactive/Linq/Observable/Buffer.cs +++ b/Rx.NET/Source/src/System.Reactive/Linq/Observable/Buffer.cs @@ -361,8 +361,11 @@ private void Tick(bool isSpan, bool isShift) // if (isSpan) { - var s = _q.Dequeue(); - ForwardOnNext(s); + if (_q.Count > 0) + { + var s = _q.Dequeue(); + ForwardOnNext(s); + } } if (isShift) diff --git a/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/BufferTest.cs b/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/BufferTest.cs index f2da10b529..202d97f4e1 100644 --- a/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/BufferTest.cs +++ b/Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/BufferTest.cs @@ -1305,6 +1305,19 @@ public void BufferWithTimeOrCount_Default() Observable.Range(1, 10, DefaultScheduler.Instance).Buffer(TimeSpan.FromDays(1), 3).Skip(1).First().AssertEqual(4, 5, 6); } + [Fact] + public void BufferWithTime_TickWhileOnCompleted() + { + var scheduler = new TestScheduler(); + + Observable.Return(1) + .Buffer(TimeSpan.FromMilliseconds(1), TimeSpan.FromMilliseconds(2), scheduler) + .Subscribe(v => + { + scheduler.AdvanceBy(TimeSpan.FromMilliseconds(1).Ticks); + }); + } + #endregion }