[Haskell-cafe] createProcess shutting file handles
Simon Marlow
marlowsd at gmail.com
Mon Feb 16 07:50:57 EST 2009
Neil Mitchell wrote:
> Hi
>
>>>> However the createProcess command structure has the close_fds flag,
>>>> which seems like it should override that behaviour, and therefore this
>>>> seems like a bug in createProcess.
>>> close_fds :: Bool
>>>
>>> Close all file descriptors except stdin, stdout and stderr in
>>> the new process
>>>
>>> This refers to inheriting open unix file descriptors (or Win32 HANDLEs)
>>> in the child process. It's not the same as closing the Haskell98 Handles
>>> in the parent process that you pass to the child process.
>> So lets not talk about if the current behaviour is a bug or not. It's
>> reasonably clear (if not brilliantly well documented) that it's the
>> intended behaviour.
>>
>> The thing we want to talk about is what reason is there for the current
>> behaviour, if that's necessary and if it is the sensible default
>> behaviour. As I said before I don't know why it is the way it is. I'm
>> cc'ing the ghc users list in the hope that someone there might know.
>
> One guiding principle of resource management is that whoever
> opens/allocates something should release/free it. i.e. if you did the
> malloc you do the free. For that reason it seems weird that I call
> openFile but someone else calls hClose on my behalf.
>
> Plus, in my particular application, the above behaviour is necessary
> or I'm going to have to write to a file, open that file, and copy it
> over to my intended file (which is what I will end up doing, no
> doubt!)
I don't remember exactly why it's done this way, but it might have
something to do with trying to maintain the (possibly ill-conceived)
Haskell98 file-locking principle. System.Posix.handleToFd also closes the
Handle, FWIW.
There's nothing stopping you from re-opening the file and seeking to the
end, as a workaround.
I could probably be convinced without much difficulty that we should stop
closing these Handles; however I do have a vague feeling that I'm
forgetting something!
Cheers,
Simon
More information about the Haskell-Cafe
mailing list