git.iko.soy/distributed-process
on master help sign in
Adapt to mkWeak# changes in GHC 8.0

mkWeak# now expects a raw state transformer instead of a boxed IO action.

commitb53d5241a21582c3d54e1e3761ac21aba1ef08d8 authorBen Gamari <ben@smart-cactus.org> dateTue 29 Mar 2016, 16:50 (11 years ago) parent30123fc
3 files changed+19−5
src/Control/Distributed/Process/Internal/CQueue.hs+6−1 src/Control/Distributed/Process/Internal/StrictMVar.hs+7−3 src/Control/Distributed/Process/Internal/WeakTQueue.hs+6−1
src/Control/Distributed/Process/Internal/CQueue.hs+6−1
@@ -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
src/Control/Distributed/Process/Internal/StrictMVar.hs+7−3
@@ -36,7 +36,7 @@ import qualified Control.Concurrent.MVar as MVar
3636#endif
3737 )
3838import GHC.MVar (MVar(MVar))
39−import GHC.IO (IO(IO))
39+import GHC.IO (IO(IO), unIO)
4040import GHC.Prim (mkWeak#)
4141import GHC.Weak (Weak(Weak))
4242
@@ -85,5 +85,9 @@ modifyMVarMasked (StrictMVar v) f =
8585 evaluateFst (x, y) = evaluate x >> return (x, y)
8686
8787mkWeakMVar :: StrictMVar a -> IO () -> IO (Weak (StrictMVar a))
88−mkWeakMVar m@(StrictMVar (MVar m#)) f = IO $ \s ->
89− case mkWeak# m# m f s of (# s1, w #) -> (# s1, Weak w #)
88+mkWeakMVar q@(StrictMVar (MVar m#)) f = IO $ \s ->
89+#if MIN_VERSION_ghc_prim(0,5,0)
90+ case mkWeak# m# q (unIO f) s of (# s', w #) -> (# s', Weak w #)
91+#else
92+ case mkWeak# m# q f s of (# s', w #) -> (# s', Weak w #)
93+#endif
src/Control/Distributed/Process/Internal/WeakTQueue.hs+6−1
@@ -1,3 +1,4 @@
1+{-# LANGUAGE CPP #-}
12{-# LANGUAGE DeriveDataTypeable #-}
23{-# LANGUAGE MagicHash, UnboxedTuples #-}
34-- | Clone of Control.Concurrent.STM.TQueue with support for mkWeakTQueue
@@ -22,7 +23,7 @@ module Control.Distributed.Process.Internal.WeakTQueue (
2223import Prelude hiding (read)
2324import GHC.Conc
2425import Data.Typeable (Typeable)
25−import GHC.IO (IO(IO))
26+import GHC.IO (IO(IO), unIO)
2627import GHC.Prim (mkWeak#)
2728import GHC.Weak (Weak(Weak))
2829
@@ -99,4 +100,8 @@ isEmptyTQueue (TQueue read write) = do
99100
100101mkWeakTQueue :: TQueue a -> IO () -> IO (Weak (TQueue a))
101102mkWeakTQueue q@(TQueue _read (TVar write#)) f = IO $ \s ->
103+#if MIN_VERSION_ghc_prim(0,5,0)
104+ case mkWeak# write# q (unIO f) s of (# s', w #) -> (# s', Weak w #)
105+#else
102106 case mkWeak# write# q f s of (# s', w #) -> (# s', Weak w #)
107+#endif