WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] Re: [PATCH] setsid() exception in xend

On Mon, Nov 28, 2005 at 01:37:13PM +0000, Ewan Mellor wrote:
> On Mon, Nov 28, 2005 at 12:53:17PM +0000, Horms wrote:
> 
> > Ewan Mellor <ewan@xxxxxxxxxxxxx> wrote:
> > > On Mon, Nov 28, 2005 at 04:29:04AM +0000, Horms wrote:
> > > 
> > >> [Re: forking / setsid'ing patch]
> > > 
> > > Hi Horms,
> > > 
> > > How are you running Xend?  There's a call to fork in fork_pid, and 
> > > no-one's
> > > had a problem with this or setsid before.
> > 
> > Hi Ewan,
> > 
> > at the time that I noticed the problem, my machine was doing some very
> > strange things that I won't go into. I can't actually reproduce the
> > exception now that I fixed the box up.
> > 
> > However, I do think that there is a minor problem. My previous patch
> > seemed to solve it, but I think it was slightly wrong, as you point out
> > by the time daemonize() is called, the code is already running as a
> > child.
> > 
> > The thing that I think is missing is that after calling setsid(),
> > fork() needs to be called again. This allows the session leader
> > (the process that called setsid()) to exit, and this its children
> > have no way of regaining the terminal.
> > 
> > Here is a slightly revised patch that puts a second fork() after
> > setsid() (rather than before as the previous incarnation did).
> > If you look at the output of ps you should with and without this
> > patch, and see that the assosiation with the terminal disapears.
> 
> I agree that the second fork is required, so you're on the right track, but
> the rest of the patch seems problematic to me.  Do we really need to have the
> grandchild write to the child, just so that the child can write to the parent
> (hunk 1 of your patch)?  Why not just pass the descriptor from grandparent to
> grandchild directly?  I think that this would mean that the daemonize process
> could keep it's original interface, and just perform the extra fork, with no
> other changes.
> 
> Even if the intermediate pipe is required, closing one descriptor called
> "status" and then opening a new one and assigning that to status just for it
> to be returned from the function is unreasonably complicated.

Sure, I can eliminate the intermediate file descriptor,
I'll send a fresh patch tomorrow. 

On a related issue, can you clarify what the race is that it
is there to avoid? It seems cumbersome as you point out.

-- 
Horms

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel