Index: server/mpm/prefork/prefork.c =================================================================== --- server/mpm/prefork/prefork.c (revision 1827362) +++ server/mpm/prefork/prefork.c (working copy) @@ -546,10 +546,13 @@ static void child_main(int child_num_arg, int chil status = apr_pollset_poll(pollset, apr_time_from_sec(10), &numdesc, &pdesc); if (status != APR_SUCCESS) { - if (APR_STATUS_IS_TIMEUP(status) || - APR_STATUS_IS_EINTR(status)) { + if (APR_STATUS_IS_EINTR(status)) { continue; } + if (APR_STATUS_IS_TIMEUP(status)) { + SAFE_ACCEPT(accept_mutex_off()); + goto check_pod; + } /* Single Unix documents select as returning errnos * EBADF, EINTR, and EINVAL... and in none of those * cases does it make sense to continue. In fact @@ -616,6 +619,7 @@ static void child_main(int child_num_arg, int chil ap_lingering_close(current_conn); } + check_pod: /* Check the pod and the generation number after processing a * connection so that we'll go away if a graceful restart occurred * while we were processing the connection or we are the lucky