[iserv] move forkIO
authorMoritz Angermann <moritz.angermann@gmail.com>
Sat, 27 May 2017 14:26:44 +0000 (10:26 -0400)
committerBen Gamari <ben@smart-cactus.org>
Fri, 2 Jun 2017 16:27:45 +0000 (12:27 -0400)
This moves the forkIO into the `startSlave` function from the
`startSlave'` function, such that this allows consumers to call
`forkSlave'` if they want the blocking behaviour.

Reviewers: bgamari, austin

Reviewed By: bgamari

Subscribers: Ericson2314, ryantrinkle, rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3601

iserv/src/Remote/Slave.hs

index 11cc68a..c5b652d 100644 (file)
@@ -46,14 +46,18 @@ startSlave verbose port s = do
   putStr "DocRoot: "
   base_path <- peekCString s
   putStrLn base_path
-  startSlave' verbose base_path (toEnum port)
+  _ <- forkIO $ startSlave' verbose base_path (toEnum port)
+  return ()
 
+-- | @startSlave'@ provdes a blocking haskell interface, that
+-- the hosting application on the target can use to start the
+-- slave process.
 startSlave' :: Bool -> String -> PortNumber -> IO ()
 startSlave' verbose base_path port = do
 
   sock <- openSocket port
 
-  _ <- forkIO $ forever $ do
+  forever $ do
     when verbose $ putStrLn "Opening socket"
     pipe <- acceptSocket sock >>= socketToPipe
     putStrLn $ "Listening on port " ++ show port
@@ -62,8 +66,6 @@ startSlave' verbose base_path port = do
     when verbose $ putStrLn "serv ended"
     return ()
 
-  return ()
-
 -- | The iserv library may need access to files, specifically
 -- archives and object files to be linked. If ghc and the slave
 -- are on the same host, this is trivial, as the underlying