From 985c6fe29406247728d889129f126ba157ed3b12 Mon Sep 17 00:00:00 2001 From: Paul Querna Date: Tue, 15 Nov 2011 15:50:09 +0000 Subject: [PATCH] Instead of disabling the listening sockets from the pollset when under load, just stop calling the accept call, but leave the sockets in the pollset. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1202256 13f79535-47bb-0310-9956-ffa450edef68 --- server/mpm/event/event.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/server/mpm/event/event.c b/server/mpm/event/event.c index 75af4f4995..8e4f580eea 100644 --- a/server/mpm/event/event.c +++ b/server/mpm/event/event.c @@ -1533,35 +1533,35 @@ static void * APR_THREAD_FUNC listener_thread(apr_thread_t * thd, void *dummy) } } else if (pt->type == PT_ACCEPT) { + int skip_accept = 0; + int connection_count_local = connection_count; + /* A Listener Socket is ready for an accept() */ if (workers_were_busy) { - if (!listeners_disabled) - disable_listensocks(process_slot); - listeners_disabled = 1; + skip_accept = 1; ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf, "All workers busy, not accepting new conns" "in this process"); } - else if (apr_atomic_read32(&connection_count) > threads_per_child + else if (listeners_disabled) { + listeners_disabled = 0; + enable_listensocks(process_slot); + } + else if (connection_count_local > threads_per_child + ap_queue_info_get_idlers(worker_queue_info) * worker_factor / WORKER_FACTOR_SCALE) { - if (!listeners_disabled) - disable_listensocks(process_slot); + skip_accept = 1; ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf, "Too many open connections (%u), " "not accepting new conns in this process", - apr_atomic_read32(&connection_count)); + connection_count_local); ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, ap_server_conf, "Idle workers: %u", ap_queue_info_get_idlers(worker_queue_info)); - listeners_disabled = 1; } - else if (listeners_disabled) { - listeners_disabled = 0; - enable_listensocks(process_slot); - } - if (!listeners_disabled) { + + if (skip_accept == 0) { lr = (ap_listen_rec *) pt->baton; ap_pop_pool(&ptrans, worker_queue_info); -- 2.40.0