diff options
Diffstat (limited to 'src/Plugins')
-rw-r--r-- | src/Plugins/BufferedPipeReader.hs | 13 |
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 |