summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/Plugins/BufferedPipeReader.hs13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/Plugins/BufferedPipeReader.hs b/src/Plugins/BufferedPipeReader.hs
index be6a652..04512e4 100644
--- a/src/Plugins/BufferedPipeReader.hs
+++ b/src/Plugins/BufferedPipeReader.hs
@@ -42,10 +42,10 @@ instance Exec BufferedPipeReader where
writer chan str rst
where
- initV :: IO ( TChan (Int, Bool, String), TMVar String, TVar Bool )
+ initV :: IO ( TChan (Int, Bool, String), TVar (Maybe String), TVar Bool )
initV = atomically $ do
tc <- newTChan
- ts <- newEmptyTMVar
+ ts <- newTVar Nothing
tb <- newTVar False
return (tc, ts, tb)
@@ -55,7 +55,8 @@ instance Exec BufferedPipeReader where
atomically $ writeTChan tc (to, tg, dt)
reader p tc
- writer :: TChan (Int, Bool, String) -> TMVar String -> TVar Bool -> IO ()
+ writer :: TChan (Int, Bool, String)
+ -> TVar (Maybe String) -> TVar Bool -> IO ()
writer tc ts otb = do
(to, tg, dt, ntb) <- update
cb dt
@@ -70,14 +71,14 @@ instance Exec BufferedPipeReader where
update :: IO (Int, Bool, String, TVar Bool)
update = atomically $ do
(to, tg, dt) <- readTChan tc
- when (to == 0) $ tryPutTMVar ts dt >> return ()
+ when (to == 0) $ writeTVar ts $ Just dt
writeTVar otb False
tb <- newTVar True
return (to, tg, dt, tb)
- reset :: Int -> Bool -> TMVar String -> TVar Bool -> IO ()
+ reset :: Int -> Bool -> TVar (Maybe String) -> TVar Bool -> IO ()
reset to tg ts tb = do
threadDelay ( to * 100 * 1000 )
readTVarIO tb >>= \b -> when b $ do
when tg $ putMVar signal Hide
- atomically (tryTakeTMVar ts) >>= maybe (return ()) cb
+ atomically (readTVar ts) >>= maybe (return ()) cb