From 98ce943cf6db4384790b7a2c41027fa8b4c52afb Mon Sep 17 00:00:00 2001 From: Yann Ylavic Date: Tue, 28 Mar 2017 09:04:01 +0000 Subject: [PATCH] Revert r1789061: it didn't any leak since duplicated listeners were already created on pconf, hence cleaned up on restart. More investigations needed... git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1789069 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 3 --- server/listen.c | 32 ++++++++++++-------------------- 2 files changed, 12 insertions(+), 23 deletions(-) diff --git a/CHANGES b/CHANGES index bc3cd96c65..16d64dd962 100644 --- a/CHANGES +++ b/CHANGES @@ -1,9 +1,6 @@ -*- coding: utf-8 -*- Changes with Apache 2.5.0 - *) core: Fix leak of duplicated listeners (socket descriptors) on restart - when ListenCoresBucketsRatio is configured (positive). [Yann Ylavic] - *) mod_http2: input buffering and dynamic flow windows for increased throughput. [Stefan Eissing] diff --git a/server/listen.c b/server/listen.c index fc8ec7f03b..9989b80748 100644 --- a/server/listen.c +++ b/server/listen.c @@ -516,23 +516,6 @@ static const char *alloc_listener(process_rec *process, char *addr, #define IS_IN6ADDR_ANY(addr) ((addr)->family == APR_INET6 \ && IN6_IS_ADDR_UNSPECIFIED(&(addr)->sa.sin6.sin6_addr)) -static apr_status_t ap_close_duplicated_listeners(void *nil) -{ - int i; - - /* Start from index 1 since either ap_duplicate_listeners() - * was called and ap_listen_buckets[0] == ap_listeners, or - * it wasn't and ap_num_listen_buckets == 0. - */ - for (i = 1; i < ap_num_listen_buckets; i++) { - ap_close_listeners_ex(ap_listen_buckets[i]); - } - ap_num_listen_buckets = 0; - ap_listen_buckets = NULL; - - return APR_SUCCESS; -} - /** * Create, open, listen, and bind all sockets. * @param process The process record for the currently running server @@ -884,15 +867,22 @@ AP_DECLARE(apr_status_t) ap_duplicate_listeners(apr_pool_t *p, server_rec *s, ap_listen_buckets = *buckets; ap_num_listen_buckets = *num_buckets; - apr_pool_cleanup_register(p, NULL, ap_close_duplicated_listeners, - apr_pool_cleanup_null); return APR_SUCCESS; } AP_DECLARE_NONSTD(void) ap_close_listeners(void) { + int i; + ap_close_listeners_ex(ap_listeners); - ap_close_duplicated_listeners(NULL); + + /* Start from index 1 since either ap_duplicate_listeners() + * was called and ap_listen_buckets[0] == ap_listeners, or + * it wasn't and ap_num_listen_buckets == 0. + */ + for (i = 1; i < ap_num_listen_buckets; i++) { + ap_close_listeners_ex(ap_listen_buckets[i]); + } } AP_DECLARE_NONSTD(void) ap_close_listeners_ex(ap_listen_rec *listeners) @@ -925,6 +915,8 @@ AP_DECLARE(void) ap_listen_pre_config(void) { old_listeners = ap_listeners; ap_listeners = NULL; + ap_listen_buckets = NULL; + ap_num_listen_buckets = 0; ap_listenbacklog = DEFAULT_LISTENBACKLOG; ap_listencbratio = 0; -- 2.40.0