]> granicus.if.org Git - apache/commit
Make the listener thread stop accepting new connections and exit
authorJeff Trawick <trawick@apache.org>
Wed, 20 Mar 2002 03:54:25 +0000 (03:54 +0000)
committerJeff Trawick <trawick@apache.org>
Wed, 20 Mar 2002 03:54:25 +0000 (03:54 +0000)
commit5c18f035bc33c53e553ff961b48a8b0dc3a46c60
tree7dfeb05c358be7075ce409d62e41785919d698be
parent36f40b25bd2228eb707413762dc4eefcb1776cf8
Make the listener thread stop accepting new connections and exit
cleanly at graceful restart time.  This is a basic requirement of
reliable graceful restarts (the kind that won't drop connections).
This allows a future fix to make worker threads hang around until
they service all connections previously accepted by the listener
thread.

The old mechanism of doing a dummy connection to wake up the
listener thread in each old child process didn't work.  It didn't
guarantee that (in the main thread) the byte was read from the pod
and global variables were set before the listener thread grabbed
the connection.  It didn't guarantee that a child process in the
new generation didn't get some of the dummy connections.

Rather than burn extra syscalls adding a unique socket or pipe
to the poll set (and breaking single listen unserialized accept
in the same change), this uses a signal sent from the main thread
to the listener thread to break it out of the poll or accept.
(We don't worry about breaking it out of the optional mutex because
the child process holding the mutex will break out of poll/accept
and release the mutex, allowing a child blocked in the mutex to
get it.  Eventually all children blocked in the mutex will come
out.)

Since the listener thread now exits reliably, the main thread
joins it.

PR:
Obtained from:
Submitted by:
Reviewed by:

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94031 13f79535-47bb-0310-9956-ffa450edef68
server/mpm/worker/pod.c
server/mpm/worker/pod.h
server/mpm/worker/worker.c