Browse Source

Do not connect if the source completes immediately

akarnokd 7 years ago
parent
commit
eb10483c3d

+ 1 - 1
Rx.NET/Source/src/System.Reactive/Linq/Observable/RefCount.cs

@@ -76,7 +76,7 @@ namespace System.Reactive.Linq.ObservableImpl
                     // subscribe to the source first
                     Run(_parent._source);
                     // then connect the source if necessary
-                    if (doConnect)
+                    if (doConnect && !Disposable.GetIsDisposed(ref conn._disposable))
                     {
                         // this makes sure if the connection ends synchronously
                         // only the currently known connection is affected

+ 25 - 0
Rx.NET/Source/tests/Tests.System.Reactive/Tests/Linq/Observable/RefCountTest.cs

@@ -411,5 +411,30 @@ namespace ReactiveTests.Tests
                 Subscribe(285, 300)
             );
         }
+
+        [Fact]
+        public void RefCount_source_already_completed_synchronously()
+        {
+            var subscribed = 0;
+            var unsubscribed = 0;
+            
+            var o1 = Observable.Create<string>(observer =>
+            {
+                subscribed++;
+                observer.OnCompleted();
+
+                return Disposable.Create(() => unsubscribed++);
+            });
+
+            var o2 = o1.Publish().RefCount();
+
+            var s1 = o2.Subscribe();
+            Assert.Equal(1, subscribed);
+            Assert.Equal(1, unsubscribed);
+
+            var s2 = o2.Subscribe();
+            Assert.Equal(1, subscribed);
+            Assert.Equal(1, unsubscribed);
+        }
     }
 }