Date: Mon, 17 Dec 2007 12:51:50 -0800 From: Alfred Perlstein <alfred@freebsd.org> To: Diomidis Spinellis <dds@aueb.gr> Cc: cvs-src@FreeBSD.ORG, src-committers@FreeBSD.ORG, Diomidis Spinellis <dds@FreeBSD.ORG>, cvs-all@FreeBSD.ORG Subject: Re: cvs commit: src/bin/mv mv.c Message-ID: <20071217205150.GH16982@elvis.mu.org> In-Reply-To: <47663BE3.6050401@aueb.gr> References: <200712161747.lBGHlYk9093518@repoman.freebsd.org> <20071217062046.GE16982@elvis.mu.org> <47663BE3.6050401@aueb.gr>
next in thread | previous in thread | raw e-mail | index | archive | help
* Diomidis Spinellis <dds@aueb.gr> [071217 01:04] wrote: > Alfred Perlstein wrote: > >* Diomidis Spinellis <dds@FreeBSD.org> [071216 09:47] wrote: > >>dds 2007-12-16 17:47:34 UTC > >> > >> FreeBSD src repository > >> > >> Modified files: > >> bin/mv mv.c > >> Log: > >> Eliminate gcc "variable clobbered" warnings by declaring the variables > >> living across the vfork as volatile. > >> > >> Noted by: kan > >> > >> Revision Changes Path > >> 1.48 +2 -1 src/bin/mv/mv.c > > > >I'm pretty sure that calling warn(3) under vfork() is not allowed > >as it can clobber stdio state. > > > >To fix this, have the parent catch a return value from the child > >and emit the warning. > > This has been there since (at least) 1994, but you're absolutely right. ...while you're there. :) > POSIX states: "[...] the behavior is undefined if the process created > by vfork() either modifies any data other than a variable of type pid_t > used to store the return value from vfork(), or returns from the > function in which vfork() was called, or calls any other function before > successfully calling _exit() or one of the exec family of functions." Yes, this is correct. > > I've fixed it in the way you suggested. Thank you very much. -Alfred
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20071217205150.GH16982>