Question about libjava/childproc.c

Thomas Stüfe thomas.stuefe at
Wed Sep 5 16:15:01 UTC 2018

Hi Alan,

On Wed, Sep 5, 2018 at 6:06 PM, Alan Bateman <Alan.Bateman at> wrote:
> On 05/09/2018 16:45, Thomas Stüfe wrote:
>> :
>> My question would be, could we not - instead of straight away closing
>> the file descriptor - set them all to FD_CLOEXEC instead?
> This comes up periodically but even if we do that then we still need this
> code to catch the places where FD_CLOEXEC isn't set.

Oh, I did not want to get rid of this coding, just change it like this:

 @@ -109,7 +100,7 @@
         int fd;
         if (isAsciiDigit(dirp->d_name[0]) &&
             (fd = strtol(dirp->d_name, NULL, 10)) >= from_fd + 2)
-            close(fd);
+            fcntl(fc, F_SETFD, FD_CLOEXEC);


So, keep looping thru the open file descriptors, but instead of
closing them - which would interfere with the file descriptor
opendir() is using - just set them to FD_CLOEXEC.

That would not interfere with opendir() and we could remove the weird
workaround above, which tries to outguess the opendir() implementation
and proactivly closes file descriptors.

I did not test this though so I may be on the wrong track.

> Note that there a thread net-dev trying to do this for sockets. The scenario
> there seems to be someone calling fork/exec directory and not using
> ProcessBuilder. The patch under discussion is not complete but it helps.
> -Alan

More information about the core-libs-dev mailing list