diff --git a/src/Quasar/Observable.hs b/src/Quasar/Observable.hs index 4aac428c365b3f9e655fe3b64a04e31086a4ecb8..90382b717889a0be3858e9b539493f7850ef3dd4 100644 --- a/src/Quasar/Observable.hs +++ b/src/Quasar/Observable.hs @@ -102,7 +102,7 @@ class IsRetrievable v o => IsObservable v o | o -> v where -- | Old signature of `observe`, will be removed from the class once it's no longer used for implementations. oldObserve :: o -> (ObservableMessage v -> IO ()) -> IO Disposable oldObserve observable callback = do - resourceManager <- unsafeNewResourceManager + resourceManager <- newUnmanagedResourceManager onResourceManager resourceManager do observe observable $ \msg -> liftIO (callback msg) pure $ toDisposable resourceManager @@ -230,7 +230,7 @@ instance IsObservable r (BindObservable r) where oldObserve :: BindObservable r -> (ObservableMessage r -> IO ()) -> IO Disposable oldObserve (BindObservable fx fn) callback = do -- Create a resource manager to ensure all subscriptions are cleaned up when disposing. - resourceManager <- unsafeNewResourceManager + resourceManager <- newUnmanagedResourceManager isDisposingVar <- newTVarIO False disposableVar <- newTMVarIO noDisposable @@ -298,7 +298,7 @@ instance IsObservable r (CatchObservable e r) where oldObserve :: CatchObservable e r -> (ObservableMessage r -> IO ()) -> IO Disposable oldObserve (CatchObservable fx fn) callback = do -- Create a resource manager to ensure all subscriptions are cleaned up when disposing. - resourceManager <- unsafeNewResourceManager + resourceManager <- newUnmanagedResourceManager isDisposingVar <- newTVarIO False disposableVar <- newTMVarIO noDisposable diff --git a/src/Quasar/ResourceManager.hs b/src/Quasar/ResourceManager.hs index 05eade77bbc6bc65cd9b40be8bad2aa5b5ea1cfa..967ff0a6502ad31da466d6b50022ea52ece4ac63 100644 --- a/src/Quasar/ResourceManager.hs +++ b/src/Quasar/ResourceManager.hs @@ -15,7 +15,7 @@ module Quasar.ResourceManager ( ResourceManager, withResourceManager, newResourceManager, - unsafeNewResourceManager, + newUnmanagedResourceManager, attachDisposable, attachDisposeAction, attachDisposeAction_, @@ -182,19 +182,19 @@ instance IsDisposable ResourceManager where ((\disposed -> unless disposed retry) =<< readTVar (disposedVar resourceManager)) withResourceManager :: (MonadAwait m, MonadMask m, MonadIO m) => (ResourceManager -> m a) -> m a -withResourceManager = bracket unsafeNewResourceManager (await <=< liftIO . dispose) +withResourceManager = bracket newUnmanagedResourceManager (await <=< liftIO . dispose) withResourceManagerM :: (MonadAwait m, MonadMask m, MonadIO m) => (ReaderT ResourceManager m a) -> m a withResourceManagerM action = withResourceManager \resourceManager -> onResourceManager resourceManager action newResourceManager :: MonadResourceManager m => m ResourceManager newResourceManager = mask_ do - resourceManager <- unsafeNewResourceManager + resourceManager <- newUnmanagedResourceManager registerDisposable resourceManager pure resourceManager -unsafeNewResourceManager :: MonadIO m => m ResourceManager -unsafeNewResourceManager = liftIO do +newUnmanagedResourceManager :: MonadIO m => m ResourceManager +newUnmanagedResourceManager = liftIO do disposingVar <- newTVarIO False disposedVar <- newTVarIO False exceptionVar <- newEmptyTMVarIO diff --git a/test/Quasar/DisposableSpec.hs b/test/Quasar/DisposableSpec.hs index a424215b7525d45fed092b954833ecc0625474a3..c8796f38d079d5318c7d6e5df3574184af5403e6 100644 --- a/test/Quasar/DisposableSpec.hs +++ b/test/Quasar/DisposableSpec.hs @@ -44,10 +44,10 @@ spec = parallel $ do describe "ResourceManager" $ do it "can be created" $ io do - void unsafeNewResourceManager + void newUnmanagedResourceManager it "can be created and disposed" $ io do - resourceManager <- unsafeNewResourceManager + resourceManager <- newUnmanagedResourceManager await =<< dispose resourceManager it "can be created and disposed" $ io do