@@ -1,3 +1,4 @@
1{-# LANGUAGE DeriveFunctor #-}
2{-# LANGUAGE DeriveFunctor #-}
2{-# LANGUAGE BangPatterns #-}
3{-# LANGUAGE BangPatterns #-}
3{-# LANGUAGE MagicHash, UnboxedTuples, PatternGuards, ScopedTypeVariables, RankNTypes #-}
4{-# LANGUAGE MagicHash, UnboxedTuples, PatternGuards, ScopedTypeVariables, RankNTypes #-}
@@ -46,7 +47,7 @@ import Control.Distributed.Process.Internal.StrictList
46import Data.Maybe (fromJust)
47import Data.Maybe (fromJust)
47import Data.Traversable (traverse)
48import Data.Traversable (traverse)
48import GHC.MVar (MVar(MVar))
49import GHC.MVar (MVar(MVar))
49−import GHC.IO (IO(IO))
50+import GHC.IO (IO(IO), unIO)
50import GHC.Prim (mkWeak#)
51import GHC.Prim (mkWeak#)
51import GHC.Weak (Weak(Weak))
52import GHC.Weak (Weak(Weak))
@@ -265,7 +266,11 @@ dequeue (CQueue arrived incoming size) blockSpec matchons = mask_ $ decrementJus
265-- | Weak reference to a CQueue
266-- | Weak reference to a CQueue
266mkWeakCQueue :: CQueue a -> IO () -> IO (Weak (CQueue a))
267mkWeakCQueue :: CQueue a -> IO () -> IO (Weak (CQueue a))
267mkWeakCQueue m@(CQueue (StrictMVar (MVar m#)) _ _) f = IO $ \s ->
268mkWeakCQueue m@(CQueue (StrictMVar (MVar m#)) _ _) f = IO $ \s ->
269+#if MIN_VERSION_ghc_prim(0,5,0)
270+ case mkWeak# m# m (unIO f) s of (# s1, w #) -> (# s1, Weak w #)
268 case mkWeak# m# m f s of (# s1, w #) -> (# s1, Weak w #)
272 case mkWeak# m# m f s of (# s1, w #) -> (# s1, Weak w #)
270queueSize :: CQueue a -> IO Int
275queueSize :: CQueue a -> IO Int
271queueSize (CQueue _ _ size) = readTVarIO size
276queueSize (CQueue _ _ size) = readTVarIO size