Browse Source

Fix crash in Buffer due to empty empty queue in tick

Dávid Karnok 5 years ago
parent
commit
2e41dfe543

+ 5 - 2
Rx.NET/Source/src/System.Reactive/Linq/Observable/Buffer.cs

@@ -361,8 +361,11 @@ namespace System.Reactive.Linq.ObservableImpl
                         //
                         if (isSpan)
                         {
-                            var s = _q.Dequeue();
-                            ForwardOnNext(s);
+                            if (_q.Count > 0)
+                            {
+                                var s = _q.Dequeue();
+                                ForwardOnNext(s);
+                            }
                         }
 
                         if (isShift)

+ 13 - 0
Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/BufferTest.cs

@@ -1305,6 +1305,19 @@ namespace ReactiveTests.Tests
             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
 
     }