Date: Sun, 18 Oct 2009 17:12:11 -0600 (MDT) From: Warren Block <wblock@wonkity.com> To: Kostik Belousov <kostikbel@gmail.com> Cc: current@freebsd.org Subject: Re: /etc/rc.d locking devd.pid (was Re: Restarting devd) Message-ID: <alpine.BSF.2.00.0910181658400.94482@wonkity.com> In-Reply-To: <20091018220935.GR2160@deviant.kiev.zoral.com.ua> References: <alpine.BSF.2.00.0910171503010.89326@wonkity.com> <alpine.BSF.2.00.0910181542440.94243@wonkity.com> <20091018220935.GR2160@deviant.kiev.zoral.com.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 19 Oct 2009, Kostik Belousov wrote: >> >> ...and this is due to dhclient, run from /etc/rc.d at startup, locking >> /var/run/devd.pid: >> >> lightning% lsof /var/run/devd.pid >> COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME >> devd 400 root 6w VREG 0,101 3 47124 /var/run/devd.pid >> dhclient 865 root 6w VREG 0,101 3 47124 /var/run/devd.pid >> dhclient 1024 _dhcp 6w VREG 0,101 3 47124 /var/run/devd.pid >> >> This is a regression from 7-STABLE, where devd.pid is only locked by >> devd after startup. > > Devd forks to spawn dhclient, it seems, and opened file descriptor for > the lock file is leaking to the child. Since pidfile(3) uses flock(2), > the lock survives devd death. > > I think that this is a generic issue with pidfile/fork interaction. > It is not obvious whether setting FD_CLOEXEC flag is right thing to > do there. > > Anyway, please test. > > diff --git a/lib/libutil/flopen.c b/lib/libutil/flopen.c > index 754c9c0..a5e436e 100644 > --- a/lib/libutil/flopen.c > +++ b/lib/libutil/flopen.c > @@ -100,6 +100,12 @@ flopen(const char *path, int flags, ...) > errno = serrno; > return (-1); > } > + if (fcntl(fd, F_SETFD, FD_CLOEXEC) != 0) { > + serrno = errno; > + (void)close(fd); > + errno = serrno; > + return (-1); > + } > return (fd); > } > } The dhclient locks are still present with this code. I just did make; make install in /usr/src/lib/libutil and rebooted to test. -Warren Block * Rapid City, South Dakota USA
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.BSF.2.00.0910181658400.94482>