On Thu, Dec 15, 2016 at 8:06 PM, Eric Covener <[email protected]> wrote:
> I have been looking at this area a little bit from the perspective of
> killing the keepalive conns as early as possible during graceful
> process exit.
>
> This might have had a bad interaction with the event wakeup patch
> here.
Hmm, the wakeup patch isn't in 2.4.24/x already no? (not proposed, by
me at least, too much changes in events already...).
> Now we can sit in poll() for significant time after graceful
> shutdown is signaled (immediately after the poll call that will be
> EINTR'ed). This will happen before the keepalive conns are moved to
> lingering close.
>
> I am not completely sure how 2.4.23 and 2.4.24 will differ here in
> practice but that is also a concern. I think something nearly as
> simple as copying the 2nd block with
>
> process_keepalive_queue(0); /* kill'em all \m/ */
>
> Into the block where poll returned EINTR may be close to what we need.
> Another unexplored option might be to refer to short poll intervals
> during shutdown, from the perspective of how these two features are
> disturbing eachother.
If we want to kill keepalive connections early on restart/shutdown I'd rather :
Index: server/mpm/event/event.c
===================================================================
--- server/mpm/event/event.c (revision 1774260)
+++ server/mpm/event/event.c (working copy)
@@ -1865,6 +1865,7 @@ static void * APR_THREAD_FUNC listener_thread(apr_
if (terminate_mode == ST_UNGRACEFUL
|| apr_atomic_read32(&connection_count) == 0)
break;
+ process_keepalive_queue(0); /* kill'em all \m/ */
}
if (conns_this_child <= 0)
_
so that we don't trigger it on any possible poll() EINTR.
Does it work for you?