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

Add newUniqueSTM to prelude

parent e94dc46b
No related branches found
No related tags found
No related merge requests found
...@@ -8,6 +8,7 @@ import Prelude ...@@ -8,6 +8,7 @@ import Prelude
import Control.Applicative (liftA2) import Control.Applicative (liftA2)
import Control.Concurrent (threadDelay) import Control.Concurrent (threadDelay)
import Control.Concurrent.STM
import Control.Monad.Catch (MonadThrow, throwM) import Control.Monad.Catch (MonadThrow, throwM)
import Control.Monad.State.Lazy as State import Control.Monad.State.Lazy as State
import Data.Char qualified as Char import Data.Char qualified as Char
...@@ -16,6 +17,8 @@ import Data.HashSet qualified as HS ...@@ -16,6 +17,8 @@ import Data.HashSet qualified as HS
import Data.Hashable qualified as Hashable import Data.Hashable qualified as Hashable
import Data.List qualified as List import Data.List qualified as List
import Data.Maybe qualified as Maybe import Data.Maybe qualified as Maybe
import Data.Unique (Unique, newUnique)
import GHC.Conc (unsafeIOToSTM)
import GHC.Stack.Types qualified import GHC.Stack.Types qualified
import Quasar.Utils.ExtraT import Quasar.Utils.ExtraT
...@@ -129,3 +132,6 @@ unlessM :: Monad m => m Bool -> m () -> m () ...@@ -129,3 +132,6 @@ unlessM :: Monad m => m Bool -> m () -> m ()
unlessM condM acc = do unlessM condM acc = do
cond <- condM cond <- condM
unless cond acc unless cond acc
newUniqueSTM :: STM Unique
newUniqueSTM = unsafeIOToSTM newUnique
...@@ -49,7 +49,6 @@ import Data.HashMap.Strict qualified as HM ...@@ -49,7 +49,6 @@ import Data.HashMap.Strict qualified as HM
import Data.List.NonEmpty (NonEmpty(..), (<|), nonEmpty) import Data.List.NonEmpty (NonEmpty(..), (<|), nonEmpty)
import Data.Sequence (Seq(..), (|>)) import Data.Sequence (Seq(..), (|>))
import Data.Sequence qualified as Seq import Data.Sequence qualified as Seq
import GHC.Conc (unsafeIOToSTM)
import Quasar.Async.Unmanaged import Quasar.Async.Unmanaged
import Quasar.Awaitable import Quasar.Awaitable
import Quasar.Disposable import Quasar.Disposable
...@@ -330,7 +329,7 @@ instance IsResourceManager DefaultResourceManager where ...@@ -330,7 +329,7 @@ instance IsResourceManager DefaultResourceManager where
attachDisposable self disposable = liftIO $ atomically $ attachDisposableSTM self disposable attachDisposable self disposable = liftIO $ atomically $ attachDisposableSTM self disposable
attachDisposableSTM DefaultResourceManager{stateVar, disposablesVar} disposable = do attachDisposableSTM DefaultResourceManager{stateVar, disposablesVar} disposable = do
key <- unsafeIOToSTM newUnique key <- newUniqueSTM
state <- readTVar stateVar state <- readTVar stateVar
case state of case state of
ResourceManagerNormal -> do ResourceManagerNormal -> do
...@@ -462,7 +461,7 @@ defaultResourceManagerDisposeResult DefaultResourceManager{resourceManagerKey, r ...@@ -462,7 +461,7 @@ defaultResourceManagerDisposeResult DefaultResourceManager{resourceManagerKey, r
-- to implement the root resource manager. -- to implement the root resource manager.
newUnmanagedDefaultResourceManagerInternal :: ResourceManager -> STM DefaultResourceManager newUnmanagedDefaultResourceManagerInternal :: ResourceManager -> STM DefaultResourceManager
newUnmanagedDefaultResourceManagerInternal parentResourceManager = do newUnmanagedDefaultResourceManagerInternal parentResourceManager = do
resourceManagerKey <- unsafeIOToSTM newUnique resourceManagerKey <- newUniqueSTM
stateVar <- newTVar ResourceManagerNormal stateVar <- newTVar ResourceManagerNormal
disposablesVar <- newTMVar HM.empty disposablesVar <- newTMVar HM.empty
lockVar <- newTVar 0 lockVar <- newTVar 0
......
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