Problem with zeroconf daemonization
"Benjamin R. Haskell" <[email protected]>
| Newsgroups | gmane.comp.compilers.distcc |
|---|---|
| Message-ID | <[email protected]> |
'paludis' is a package manager for Gentoo Linux (and Exherbo). I sent an email to the 'paludis' users list about a problem with waiting for the distcc zeroconf daemon to stop. link: http://lists.pioto.org/pipermail/paludis-user/2010-January/001250.html I use 'distcc -j' to set up my MAKEOPTS variable. The problem is with a wrapper used to prefix output for paludis with a tag indicating its origin. When using '+zeroconf' in DISTCC_HOSTS, paludis waits 20 seconds for distcc unconditionally, because distcc doesn't close the extra file descriptors that are open due to this output munging. (So, 'paludis' waits on the grandchild daemon process that holds those fd's open.) I stated in that message that I feel like this is a problem with the way distcc daemonizes (and not with the way paludis wraps output). I'm not as certain of that as I felt a couple hours ago, but it still feels accurate (that the daemonizing process has the responsibility to close any open fd's it's not going to use). If so, it seems like a pretty easy fix (to just close more fd's than 0, 1, and 2). I can commit the attached patch if 1024 doesn't seem too magic-number-y (and I'm not spouting nonsense). Best, Ben __ distcc mailing list http://distcc.samba.org/ To unsubscribe or change options: https://lists.samba.org/mailman/listinfo/distcc
distcc-r711-zeroconf-daemon.r0.patch
(text/plain, 676 B)
Index: src/zeroconf.c
===================================================================
--- src/zeroconf.c (revision 711)
+++ src/zeroconf.c (working copy)
@@ -583,10 +583,11 @@
int fd;
/* Child */
- /* Close file descriptors and replace them by /dev/null */
- close(0);
- close(1);
- close(2);
+ /* Close file descriptors */
+ for (fd = 0; fd < 1024; fd++) {
+ close(fd);
+ }
+ /* Replace std{in/out/err} by /dev/null */
fd = open("/dev/null", O_RDWR);
assert(fd == 0);
fd = dup(0);