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

Optimize newSTMDisposer

parent 9667cd1a
No related branches found
No related tags found
Loading
......@@ -39,13 +39,19 @@ import Quasar.Exceptions
import Quasar.Monad
import Quasar.Prelude
import Quasar.Resources.Disposer
import Quasar.Utils.ShortIO
newIODisposer :: IO () -> TIOWorker -> ExceptionChannel -> STM Disposer
newIODisposer fn worker exChan = newPrimitiveDisposer (forkAsyncShortIO fn exChan) worker exChan
newSTMDisposer :: STM () -> TIOWorker -> ExceptionChannel -> STM Disposer
newSTMDisposer fn = newIODisposer (atomically fn)
newSTMDisposer fn worker exChan = newPrimitiveDisposer disposeFn worker exChan
where
disposeFn :: ShortIO (Awaitable ())
disposeFn = unsafeShortIO $ atomically $
-- Spawn a thread only if the transaction retries
(pure <$> fn) `orElse` forkAsyncSTM (atomically fn) worker exChan
registerResource :: (Resource a, MonadQuasar m) => a -> m ()
......
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