On Wed, Jan 11, 2012 at 04:35:26PM +0000, Guy Helmer wrote: > Author: ghelmer > Date: Wed Jan 11 16:35:26 2012 > New Revision: 229966 > URL: http://svn.freebsd.org/changeset/base/229966 > > Log: > jilles pointed out that O_CLOEXEC could be used in the open(2) flags > rather than using fcntl(2) later, and in addition to saving a system > call, removes a possible race with fork/exec from threads or signal > handlers.
So now we can remove fcntl() as the source of possible pidfile_open() errnos from the manual page.:) > Modified: > head/lib/libutil/pidfile.c > > Modified: head/lib/libutil/pidfile.c > ============================================================================== > --- head/lib/libutil/pidfile.c Wed Jan 11 15:00:16 2012 > (r229965) > +++ head/lib/libutil/pidfile.c Wed Jan 11 16:35:26 2012 > (r229966) > @@ -117,7 +117,7 @@ pidfile_open(const char *path, mode_t mo > * pidfile_write() can be called multiple times. > */ > fd = flopen(pfh->pf_path, > - O_WRONLY | O_CREAT | O_TRUNC | O_NONBLOCK, mode); > + O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC | O_NONBLOCK, mode); > if (fd == -1) { > if (errno == EWOULDBLOCK && pidptr != NULL) { > count = 20; > @@ -139,19 +139,6 @@ pidfile_open(const char *path, mode_t mo > } > > /* > - * Prevent the file descriptor from escaping to other > - * programs via exec(3). > - */ > - if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) { > - error = errno; > - unlink(pfh->pf_path); > - close(fd); > - free(pfh); > - errno = error; > - return (NULL); > - } > - > - /* > * Remember file information, so in pidfile_write() we are sure we write > * to the proper descriptor. > */ -- Pawel Jakub Dawidek http://www.wheelsystems.com FreeBSD committer http://www.FreeBSD.org Am I Evil? Yes, I Am! http://yomoli.com
pgpW6Entf9saW.pgp
Description: PGP signature