@@ -261,13 +261,17 @@ data MVarState m a = MVarEmpty !(Deque (TVar m (Maybe a))) -- blocked on take
261261newEmptyMVarDefault :: MonadSTM m => m (MVarDefault m a )
262262newEmptyMVarDefault = MVar <$> newTVarIO (MVarEmpty mempty mempty )
263263
264+ labelMVarDefault
265+ :: MonadLabelledSTM m
266+ => MVarDefault m a -> String -> m ()
267+ labelMVarDefault (MVar tvar) = atomically . labelTVar tvar . (<> " -MVar" )
264268
265269newMVarDefault :: MonadSTM m => a -> m (MVarDefault m a )
266270newMVarDefault a = MVar <$> newTVarIO (MVarFull a mempty )
267271
268272
269273putMVarDefault :: ( MonadMask m
270- , MonadSTM m
274+ , MonadLabelledSTM m
271275 , forall x tvar . tvar ~ TVar m x => Eq tvar
272276 )
273277 => MVarDefault m a -> a -> m ()
@@ -278,6 +282,7 @@ putMVarDefault (MVar tv) x = mask_ $ do
278282 -- It's full, add ourselves to the end of the 'put' blocked queue.
279283 MVarFull x' putq -> do
280284 putvar <- newTVar False
285+ labelTVar putvar " internal-putvar"
281286 writeTVar tv (MVarFull x' (Deque. snoc (x, putvar) putq))
282287 return (Just putvar)
283288
@@ -350,7 +355,7 @@ tryPutMVarDefault (MVar tv) x =
350355
351356
352357takeMVarDefault :: ( MonadMask m
353- , MonadSTM m
358+ , MonadLabelledSTM m
354359 , forall x tvar . tvar ~ TVar m x => Eq tvar
355360 )
356361 => MVarDefault m a
@@ -362,6 +367,7 @@ takeMVarDefault (MVar tv) = mask_ $ do
362367 -- It's empty, add ourselves to the end of the 'take' blocked queue.
363368 MVarEmpty takeq readq -> do
364369 takevar <- newTVar Nothing
370+ labelTVar takevar " internal-takevar"
365371 writeTVar tv (MVarEmpty (Deque. snoc takevar takeq) readq)
366372 return (Left takevar)
367373
@@ -433,7 +439,7 @@ tryTakeMVarDefault (MVar tv) = do
433439-- 'putMVar' value. It will also not block if the 'MVar' is full, even if there
434440-- are other threads attempting to 'putMVar'.
435441--
436- readMVarDefault :: ( MonadSTM m
442+ readMVarDefault :: ( MonadLabelledSTM m
437443 , MonadMask m
438444 , forall x tvar . tvar ~ TVar m x => Eq tvar
439445 )
@@ -446,6 +452,7 @@ readMVarDefault (MVar tv) = do
446452 -- It's empty, add ourselves to the 'read' blocked queue.
447453 MVarEmpty takeq readq -> do
448454 readvar <- newTVar Nothing
455+ labelTVar readvar " internal-readvar"
449456 writeTVar tv (MVarEmpty takeq (Deque. snoc readvar readq))
450457 return (Left readvar)
451458
0 commit comments