diff options
Diffstat (limited to 'server')
-rw-r--r-- | server/mpm/worker/config5.m4 | 1 | ||||
-rw-r--r-- | server/mpm/worker/worker.c | 18 |
2 files changed, 15 insertions, 4 deletions
diff --git a/server/mpm/worker/config5.m4 b/server/mpm/worker/config5.m4 index 52ab50e82c..cc13134845 100644 --- a/server/mpm/worker/config5.m4 +++ b/server/mpm/worker/config5.m4 @@ -1,5 +1,6 @@ dnl ## XXX - Need a more thorough check of the proper flags to use if test "$MPM_NAME" = "worker" ; then + AC_CHECK_FUNCS(pthread_kill) APACHE_FAST_OUTPUT(server/mpm/$MPM_NAME/Makefile) fi diff --git a/server/mpm/worker/worker.c b/server/mpm/worker/worker.c index 1e5d7c9c07..d92da0cbaa 100644 --- a/server/mpm/worker/worker.c +++ b/server/mpm/worker/worker.c @@ -255,11 +255,15 @@ static void wakeup_listener(void) { listener_may_exit = 1; /* - * we should just be able to "kill(ap_my_pid, LISTENER_SIGNAL)" and wake - * up the listener thread since it is the only thread with SIGHUP - * unblocked, but that doesn't work on Linux + * we should just be able to "kill(ap_my_pid, LISTENER_SIGNAL)" on all + * platforms and wake up the listener thread since it is the only thread + * with SIGHUP unblocked, but that doesn't work on Linux */ +#ifdef HAVE_PTHREAD_KILL pthread_kill(*listener_os_thread, LISTENER_SIGNAL); +#else + kill(ap_my_pid, LISTENER_SIGNAL); +#endif } #define ST_INIT 0 @@ -1043,7 +1047,13 @@ static void join_workers(apr_thread_t *listener, apr_thread_t **threads) */ iter = 0; - while (iter < 10 && pthread_kill(*listener_os_thread, 0) == 0) { + while (iter < 10 && +#ifdef HAVE_PTHREAD_KILL + pthread_kill(*listener_os_thread, 0) +#else + kill(ap_my_pid, 0) +#endif + == 0) { /* listener not dead yet */ apr_sleep(APR_USEC_PER_SEC / 2); wakeup_listener(); |