Skip to content
Snippets Groups Projects
Commit 4874b82a authored by Jens Nolte's avatar Jens Nolte
Browse files

Add isDisposing

parent 9d14da7f
No related branches found
No related tags found
No related merge requests found
......@@ -6,6 +6,7 @@ module Quasar.Resources.Disposer (
dispose,
disposeEventuallySTM,
disposeEventuallySTM_,
isDisposing,
isDisposed,
newPrimitiveDisposer,
......@@ -20,6 +21,7 @@ import Control.Concurrent (forkIO)
import Control.Concurrent.STM
import Control.Monad (foldM)
import Control.Monad.Catch
import Data.Either (isRight)
import Data.HashMap.Strict (HashMap)
import Data.HashMap.Strict qualified as HM
import Data.HashSet (HashSet)
......@@ -75,6 +77,13 @@ isDisposed resource =
FnDisposer _ _ _ state _ -> join (toAwaitable state)
ResourceManagerDisposer resourceManager -> resourceManagerIsDisposed resourceManager
isDisposing :: Resource a => a -> Awaitable ()
isDisposing resource =
case getDisposer resource of
FnDisposer _ _ _ state _ -> unsafeAwaitSTM (check . isRight =<< readTOnceState state)
ResourceManagerDisposer resourceManager -> resourceManagerIsDisposing resourceManager
beginDisposeFnDisposer :: TIOWorker -> ExceptionChannel -> DisposerState -> Finalizers -> STM (Awaitable ())
beginDisposeFnDisposer worker exChan disposeState finalizers =
......@@ -235,6 +244,13 @@ resourceManagerIsDisposed rm = unsafeAwaitSTM $
ResourceManagerDisposed -> pure ()
_ -> retry
resourceManagerIsDisposing :: ResourceManager -> Awaitable ()
resourceManagerIsDisposing rm = unsafeAwaitSTM $
readTVar (resourceManagerState rm) >>= \case
(ResourceManagerNormal _ _) -> retry
_ -> pure ()
-- * Implementation internals
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment