From 0eeccb58fc1b2aa664e5fd391dfa596529c386e8 Mon Sep 17 00:00:00 2001 From: Jens Nolte <git@queezle.net> Date: Wed, 28 Oct 2020 18:57:14 +0100 Subject: [PATCH] Unsubscribe joinObservable callbacks correctly --- src/lib/Qd/Observable.hs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/Qd/Observable.hs b/src/lib/Qd/Observable.hs index b0829c6..166d917 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' -- GitLab