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

Change TIOWorker to use TQueue

parent 3d786053
No related branches found
No related tags found
No related merge requests found
...@@ -14,13 +14,13 @@ import Quasar.Exceptions ...@@ -14,13 +14,13 @@ import Quasar.Exceptions
import Quasar.Prelude import Quasar.Prelude
newtype TIOWorker = TIOWorker (TMVar (IO ())) newtype TIOWorker = TIOWorker (TQueue (IO ()))
startTrivialIO :: forall a. TIOWorker -> ExceptionChannel -> IO a -> STM (Awaitable a) startTrivialIO :: forall a. TIOWorker -> ExceptionChannel -> IO a -> STM (Awaitable a)
startTrivialIO (TIOWorker jobVar) exChan fn = do startTrivialIO (TIOWorker jobQueue) exChan fn = do
resultVar <- newAsyncVarSTM resultVar <- newAsyncVarSTM
putTMVar jobVar $ job resultVar writeTQueue jobQueue $ job resultVar
pure $ toAwaitable resultVar pure $ toAwaitable resultVar
where where
job :: AsyncVar a -> IO () job :: AsyncVar a -> IO ()
...@@ -37,11 +37,11 @@ startTrivialIO_ x y z = void $ startTrivialIO x y z ...@@ -37,11 +37,11 @@ startTrivialIO_ x y z = void $ startTrivialIO x y z
newTIOWorker :: IO TIOWorker newTIOWorker :: IO TIOWorker
newTIOWorker = do newTIOWorker = do
jobVar <- newEmptyTMVarIO jobQueue <- newTQueueIO
void $ forkIO $ void $ forkIO $
handle catch
(forever $ join $ atomically $ readTQueue jobQueue)
-- Relies on garbage collection to remove the thread when it is no longer needed -- Relies on garbage collection to remove the thread when it is no longer needed
(\(_ :: BlockedIndefinitelyOnSTM) -> pure ()) (\(_ :: BlockedIndefinitelyOnSTM) -> pure ())
(forever $ join $ atomically $ takeTMVar jobVar)
pure $ TIOWorker jobVar pure $ TIOWorker jobQueue
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