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