diff --git a/src/lib/Qd/Observable.hs b/src/lib/Qd/Observable.hs index b0829c61af09ab02c9a36e47ff4d60cd47871e94..166d91729f7d522914580f033fe4e0100fc3618d 100644 --- a/src/lib/Qd/Observable.hs +++ b/src/lib/Qd/Observable.hs @@ -142,7 +142,7 @@ instance forall o i v. (Observable i o, Observable v i) => Observable v (JoinedO subscribe (JoinedObservable outer) callback = do innerSubscriptionMVar <- newMVar dummySubscription outerSubscription <- subscribe outer (outerCallback innerSubscriptionMVar) - return $ SubscriptionHandle{unsubscribe = unsubscribe outerSubscription} + return $ SubscriptionHandle{unsubscribe = unsubscribe outerSubscription >> readMVar innerSubscriptionMVar >>= dispose} where dummySubscription = SubscriptionHandle { unsubscribe = return () } outerCallback innerSubscriptionMVar = outerSubscription' @@ -168,7 +168,7 @@ instance forall o i v. (Observable (Maybe i) o, Observable v i) => Observable (M subscribe (JoinedObservableMaybe outer) callback = do innerSubscriptionMVar <- newMVar dummySubscription outerSubscription <- subscribe outer (outerHandler innerSubscriptionMVar) - return $ SubscriptionHandle{unsubscribe = unsubscribe outerSubscription} + return $ SubscriptionHandle{unsubscribe = unsubscribe outerSubscription >> readMVar innerSubscriptionMVar >>= dispose} where dummySubscription = SubscriptionHandle { unsubscribe = return () } outerHandler innerSubscriptionMVar = outerSubscription' @@ -201,7 +201,7 @@ instance forall e o i v. (Observable (Either e i) o, Observable v i) => Observab subscribe (JoinedObservableEither outer) callback = do innerSubscriptionMVar <- newMVar dummySubscription outerSubscription <- subscribe outer (outerHandler innerSubscriptionMVar) - return $ SubscriptionHandle{unsubscribe = unsubscribe outerSubscription} + return $ SubscriptionHandle{unsubscribe = unsubscribe outerSubscription >> readMVar innerSubscriptionMVar >>= dispose} where dummySubscription = SubscriptionHandle { unsubscribe = return () } outerHandler innerSubscriptionMVar = outerSubscription'