RE: Environment variable does not work (especially DARCS_EDITOR)

On 26 April 2005 02:15, Benedikt Schmidt wrote:
Sorry for taking so long to reply.
On Tue, 2005-04-19 at 11:36 +0100, Simon Marlow wrote:
module Main where import System.Cmd main = rawSystem "nvi" [] [ patch calling resetNonBlockingFD in runProcess ] If we did this, we would also need to re-enable non-blocking mode after the rawSystem completes. Also, this doesn't work well if runProcess is used and the Haskell program continues to run while
On 16 April 2005 20:41, Benedikt Schmidt wrote: the subprocess is executing, because the O_NONBLOCK flag is shared between parent and child.
I didn't think about the flags beeing shared between parent and child.
I tried using setFdOption first, but didn't see that rawSystem sets stdin back to blocking mode when stdin is evaluated.
This works for me now with ghc-6.4: main = do stdin `seq` return () bracket (setFdOption stdInput NonBlockingRead False) (\_ -> setFdOption stdInput NonBlockingRead True) (\_ -> rawSystem "nvi" [])
So I suggest doing this for System.Cmd.{system,rawSystem} only.
Would something like that be safe for system and rawSystem if all arguments where forced before the setFdOption? If there are several threads?
You're right, it's not safe in general. Better to leave it up to the user - your fix is fine. I'll put an entry in the FAQ. Cheers, Simon
participants (1)
-
Simon Marlow