cvs commit: src/bin/mv mv.c

Alfred Perlstein alfred at freebsd.org
Mon Dec 17 12:53:01 PST 2007


* Diomidis Spinellis <dds at aueb.gr> [071217 01:04] wrote:
> Alfred Perlstein wrote:
> >* Diomidis Spinellis <dds at 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


More information about the cvs-src mailing list