Open
Description
I have a program in which I use forkProcess
. When it is run with -threaded +RTS -N1
, it works fine, but when I use -threaded +RTS -N2
I get this error:
failed to create OS thread: Resource temporarily unavailable
I haven't been able to reproduce this issue in a small test case, only within the larger program. To provide some context though, it' called only from the following function:
pOpen :: FilePath -> [String] -> (Handle -> IO a) -> IO a
pOpen fp args func = do
pipepair <- createPipe
pid <- do
p <- Control.Exception.try (forkProcess $ childstuff pipepair)
case p of
Right x -> return x
Left (e :: Control.Exception.IOException) -> fail ("Error in fork: " ++ show e)
retval <- callfunc pipepair
let rv = seq retval retval
void $ getProcessStatus True False pid
return rv
where
callfunc pipepair = do
closeFd (fst pipepair)
h <- fdToHandle (snd pipepair)
x <- func h
hClose h
return $! x
childstuff pipepair = do
void $ dupTo (fst pipepair) stdInput
closeFd $ fst pipepair
closeFd $ snd pipepair
executeFile fp True args Nothing
GHC Version: 7.10.3
unix version: 2.7.1.0
OS: Ubuntu 16.04