From: wolfgang Date: Wed, 1 Oct 2003 10:57:44 +0000 (+0000) Subject: [project @ 2003-10-01 10:57:44 by wolfgang] X-Git-Tag: nhc98-1-18-release~486 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=221834f61e883a17db96bb8b8c0157a3de626738;p=ghc-base.git [project @ 2003-10-01 10:57:44 by wolfgang] New implementation & changed type signature of forkProcess forkProcess now has the following type: forkProcess :: IO () -> IO ProcessID forkProcessAll has been removed as it is unimplementable in the threaded RTS. forkProcess using the old type (IO (Maybe ProcessID)) was impossible to implement correctly in the non-threaded RTS and very hard to implement in the threaded RTS. The new type signature allows a clean and simple implementation. --- diff --git a/GHC/Conc.lhs b/GHC/Conc.lhs index 279681b..2a24fa5 100644 --- a/GHC/Conc.lhs +++ b/GHC/Conc.lhs @@ -26,7 +26,6 @@ module GHC.Conc , pseq -- :: a -> b -> b , yield -- :: IO () , labelThread -- :: ThreadId -> String -> IO () - , forkProcessPrim -- :: IO Int -- Waiting , threadDelay -- :: Int -> IO () @@ -154,29 +153,6 @@ labelThread (ThreadId t) str = IO $ \ s -> adr = byteArrayContents# ps in case (labelThread# t adr s) of s1 -> (# s1, () #) -{- | This function is a replacement for 'System.Posix.Process.forkProcessAll': -This implementation /will stop all other Concurrent Haskell threads/ in the -(heavyweight) forked copy. -'forkProcessPrim' returns the pid of the child process to the parent, 0 to the -child, and a value less than 0 in case of errors. See also: -'System.Posix.Process.forkProcess' in package @unix@. - -Without this function, you need excessive and often impractical -explicit synchronization using the regular Concurrent Haskell constructs to assure -that only the desired thread is running after the fork(). - -The stopped threads are /not/ garbage collected! This behaviour may change in -future releases. - -NOTE: currently, main threads are not stopped in the child process. -To work around this problem, call 'forkProcessPrim' from the main thread. --} - --- XXX RTS should know about 'pid_t'. - -forkProcessPrim :: IO Int -forkProcessPrim = IO $ \s -> case (forkProcess# s) of (# s1, id #) -> (# s1, (I# id) #) - -- Nota Bene: 'pseq' used to be 'seq' -- but 'seq' is now defined in PrelGHC --