From 0f4d066d5256e04b1fa6651c785086b3ca0c7c30 Mon Sep 17 00:00:00 2001 From: Jens Nolte <git@queezle.net> Date: Thu, 10 Feb 2022 20:01:49 +0100 Subject: [PATCH] Change TIOWorker to use TQueue --- src/Quasar/Async/STMHelper.hs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Quasar/Async/STMHelper.hs b/src/Quasar/Async/STMHelper.hs index 11dccad..d541072 100644 --- a/src/Quasar/Async/STMHelper.hs +++ b/src/Quasar/Async/STMHelper.hs @@ -14,13 +14,13 @@ import Quasar.Exceptions import Quasar.Prelude -newtype TIOWorker = TIOWorker (TMVar (IO ())) +newtype TIOWorker = TIOWorker (TQueue (IO ())) startTrivialIO :: forall a. TIOWorker -> ExceptionChannel -> IO a -> STM (Awaitable a) -startTrivialIO (TIOWorker jobVar) exChan fn = do +startTrivialIO (TIOWorker jobQueue) exChan fn = do resultVar <- newAsyncVarSTM - putTMVar jobVar $ job resultVar + writeTQueue jobQueue $ job resultVar pure $ toAwaitable resultVar where job :: AsyncVar a -> IO () @@ -37,11 +37,11 @@ startTrivialIO_ x y z = void $ startTrivialIO x y z newTIOWorker :: IO TIOWorker newTIOWorker = do - jobVar <- newEmptyTMVarIO + jobQueue <- newTQueueIO void $ forkIO $ - handle + catch + (forever $ join $ atomically $ readTQueue jobQueue) -- Relies on garbage collection to remove the thread when it is no longer needed (\(_ :: BlockedIndefinitelyOnSTM) -> pure ()) - (forever $ join $ atomically $ takeTMVar jobVar) - pure $ TIOWorker jobVar + pure $ TIOWorker jobQueue -- GitLab