Aaron Bannert <[EMAIL PROTECTED]> writes:

> On Tue, Mar 05, 2002 at 05:07:38PM -0500, Jeff Trawick wrote:
> > Aaron Bannert <[EMAIL PROTECTED]> writes:
> > 
> > > On Tue, Mar 05, 2002 at 04:53:23PM -0500, Jeff Trawick wrote:
> > > > Here is the sequence of events:
> > > > 
> > > > 1) a thread in child process A is waiting on semaphore
> > > > 2) graceful restart triggered
> > > > 3) parent process cleans up the semaphore
> > > > 4) that thread in child process A gets a failure (EIDRM) from the
> > > >    semaphore obtain and gracefully brings down other threads in child
> > > >    process A
> > > 
> > > My point is that #3 and #4 are in the wrong order. There should be
> > > nobody waiting on a semaphore when the parent cleans it up.
> > 
> > For a graceful restart, the parent can't wait around for all children
> > to go away before it cleans up and gets the next generation started.
> > It needs to let worker threads in the old children die gradually as
> > they finish processing active connection.  That process can take a
> > long time.
> 
> Will they actually hold the semaphore while they are servicing long-lived
> connections?

no... the semaphore is held only during the poll+accept

>               I guess we'd have to make it so that as soon as that worker*
> is done with that connection it checks to see if it is time to quit w/o
> hitting the semaphore again.  Would that work?

Current code doesn't try to obtain the semaphore again if it is time
to go away.

>                                               It still seems weird to
> me that we're essentially ignoring accept mutex errors during
> graceful.

(shrug)

-- 
Jeff Trawick | [EMAIL PROTECTED] | PGP public key at web site:
       http://www.geocities.com/SiliconValley/Park/9289/
             Born in Roswell... married an alien...

Reply via email to