@@ -1,3 +1,4 @@
1+{-# LANGUAGE CPP #-}
12{-# LANGUAGE DeriveFunctor #-}
23{-# LANGUAGE BangPatterns #-}
34{-# LANGUAGE MagicHash, UnboxedTuples, PatternGuards, ScopedTypeVariables, RankNTypes #-}
@@ -46,7 +47,7 @@ import Control.Distributed.Process.Internal.StrictList
4647import Data.Maybe (fromJust)
4748import Data.Traversable (traverse)
4849import GHC.MVar (MVar(MVar))
49−import GHC.IO (IO(IO))
50+import GHC.IO (IO(IO), unIO)
5051import GHC.Prim (mkWeak#)
5152import GHC.Weak (Weak(Weak))
5253
@@ -265,7 +266,11 @@ dequeue (CQueue arrived incoming size) blockSpec matchons = mask_ $ decrementJus
265266-- | Weak reference to a CQueue
266267mkWeakCQueue :: CQueue a -> IO () -> IO (Weak (CQueue a))
267268mkWeakCQueue 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 #)
271+#else
268272 case mkWeak# m# m f s of (# s1, w #) -> (# s1, Weak w #)
273+#endif
269274
270275queueSize :: CQueue a -> IO Int
271276queueSize (CQueue _ _ size) = readTVarIO size