on master help sign in
Change the doorbell MVar type to () from Bool
commitbac26fc44e1210ee5786e11e7e53f9f04fea3a6f authorHarendra Kumar <harendra.kumar@gmail.com> dateThu 10 May 2018, 06:43 (8 years ago) parentb8ced4d
1 file changed+5−5
src/Streamly/Core.hs+5−5
src/Streamly/Core.hs+5−5
@@ -149,7 +149,7 @@ data SVarStyle = SVarStyle SVarTag SVarSched deriving Eq
149149--
150150data SVar m a =
151151 SVar { outputQueue :: IORef [ChildEvent a]
152− , doorBell :: MVar Bool -- wakeup mechanism for outQ
152+ , doorBell :: MVar () -- wakeup mechanism for outQ
153153 , enqueue :: Stream m a -> IO ()
154154 , runqueue :: m ()
155155 , runningThreads :: IORef (Set ThreadId)
@@ -311,7 +311,7 @@ send sv msg = liftIO $ do
311311 if null old
312312 -- XXX need a memory barrier? The wake up must happen only after the
313313 -- store has finished otherwise we can have lost wakeup problems.
314− then void $ tryPutMVar (doorBell sv) True
314+ then void $ tryPutMVar (doorBell sv) ()
315315 else return ()
316316
317317{-# INLINE sendStop #-}
@@ -405,7 +405,7 @@ modifyThread sv tid = do
405405 then let new = (S.delete tid old) in (new, new)
406406 else let new = (S.insert tid old) in (new, old)
407407 if null changed
408− then liftIO $ void $ tryPutMVar (doorBell sv) True
408+ then liftIO $ void $ tryPutMVar (doorBell sv) ()
409409 else return ()
410410
411411-- | This is safe even if we are adding more threads concurrently because if
@@ -456,7 +456,7 @@ sendWorkerWait sv = do
456456 done <- queueEmpty sv
457457 if not done
458458 then pushWorker sv >> sendWorkerWait sv
459− else void (liftIO $ takeMVar (doorBell sv))
459+ else liftIO $ takeMVar (doorBell sv)
460460
461461-- | Pull a stream from an SVar.
462462{-# NOINLINE fromStreamVar #-}
@@ -464,7 +464,7 @@ fromStreamVar :: MonadParallel m => SVar m a -> Stream m a
464464fromStreamVar sv = Stream $ \_ stp sng yld -> do
465465 let SVarStyle _ sched = svarStyle sv
466466 if sched == Par
467− then void $ liftIO $ takeMVar (doorBell sv)
467+ then liftIO $ takeMVar (doorBell sv)
468468 else do
469469 res <- liftIO $ tryTakeMVar (doorBell sv)
470470 when (isNothing res) $ sendWorkerWait sv