[PATCH] Fix start-stop-daemon on no-MMU

Alex Landau landau_alex at yahoo.com
Thu Aug 2 03:32:10 PDT 2007


--- Denis Vlasenko <vda.linux at googlemail.com> wrote:

> On 8/2/07, Alex Landau <landau_alex at yahoo.com> wrote:
> > --- Mike Frysinger <vapier at gentoo.org> wrote:
> >
> > > On Thursday 02 August 2007, Alex Landau wrote:
> > > > +               if (pid != 0) /* parent */
> > > > +                       exit(0); /* the child may have changed the stack,
> > > > so no return possible, only function calls */ /* child */
> > >
> > > i havent read the code, but gut feeling says that should be _exit(0) ... or do
> > > i need to read the code ? :)
> > > -mike
> 
> Thanks for testing Alex, I am applying the patch.
> I am also reusing write_pidfile() from libbb here:
> 
>         if (opt & OPT_MAKEPID) {
>                 /* user wants _us_ to make the pidfile */
>                 write_pidfile(pidfile);
>         }
> 
> In the process I (hopefully) fixed that nasty
> "ifupdown + udhcpc_without_pidpile_creation" fsckup...
> 

Tested, working.

> > You do need to read the code :-)
> > It's the parent who runs exit(), not the child, so it should be exit() and not
> _exit().
> 
> Mike is implying that _exit() is mucking around much less that exit()
> and for paranoid
> reasons we are better off using it. So I changed exit to _exit in that spot.
> We don't even need to fflush() before that, we did no output yet.

I'm still not sure _exit is better in this case, but I'm not 100% sure it's wrong too...
Anyway it's currently working.

> 
> > The child merely execv()s.
> 
> So on NOMMU execv() basically creates another process in another
> memory region, and
> terminates current one, unless there is a parent sitting in vfork and waiting
> (in which case parent is woken up instead of exit)?

No, execve works exactly it does on an MMU system. It loads a new executable into the
current process. The difference is with vfork: on vfork, the parent is suspended, and the
child shares it's whole address space with the parent (the stack is shared too - that's
why this is so tricky!). The parent is resumed when the child either execve()s or
_exit()s.

> --
> vda
> 

Alex


       
____________________________________________________________________________________
Building a website is a piece of cake. Yahoo! Small Business gives you all the tools to get online.
http://smallbusiness.yahoo.com/webhosting 


More information about the busybox mailing list