Jeff Trawick <[EMAIL PROTECTED]> writes:

> b) 1 listening socket in Linux, where we don't need an accept
>    mutex (intermittent failure):
> 
>    [notice] child pid 18314 exit signal Segmentation fault (11)
... 
> d) Dale Ghent hit a segfault on Solaris 8 in ap_queue_interrupt_all()
>    (NULL parameter passed in).

At least some segfaults I'm seeing on Linux match the Solaris
symptom.  The bug is that we're calling ap_queue_interrupt_all()
before initializing worker_queue.

 t0       we need to fork() a new child for some reason
 t1       we get the graceful restart prod on the pod BEFORE
          the start_threads() thread has gotten dispatched and
          initialized worker_queue
 t2       we call signal_workers() which tries to use a NULL
          worker_queue and we segfault

One possible fix for this is to initialize worker_queue in
child_main() before creating the start_threads() thread so that there
is no question that the init has been done before we try to use it.

But there seem to be other timing issues as well.  Maybe we miss our
chance to apr_thread_join() a worker thread right before it has been
created.  A fix that would handle that as well as the first problem
would be to join the start_threads() thread before trying to process a
restart request.

-- 
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