From c810409b4c033e620dbdd5ee9a02618880f9c0b4 Mon Sep 17 00:00:00 2001 From: Yann Ylavic Date: Tue, 28 Mar 2017 20:58:42 +0000 Subject: [PATCH] Revert r1789213 and r1789214: wrong branch... git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1789215 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 5 ----- server/listen.c | 50 +++++++++++++++++-------------------------------- 2 files changed, 17 insertions(+), 38 deletions(-) diff --git a/CHANGES b/CHANGES index 840e99526b..ca67dd5209 100644 --- a/CHANGES +++ b/CHANGES @@ -2,11 +2,6 @@ Changes with Apache 2.4.26 - *) core: Disallow multiple Listen on the same IP:port when listener buckets - are configured (ListenCoresBucketsRatio > 0), consistently with the single - bucket case (default), thus avoiding the leak of the corresponding socket - descriptors on graceful restart. [Yann Ylavic] - *) mod_cache: Fix a regression in 2.4.25 for the forward proxy case by computing and using the same entity key according to when the cache checks, loads and saves the request. diff --git a/server/listen.c b/server/listen.c index a8e9e6f6e3..d44c7c9f44 100644 --- a/server/listen.c +++ b/server/listen.c @@ -277,14 +277,18 @@ static apr_status_t close_listeners_on_exec(void *v) return APR_SUCCESS; } -static int find_listeners(ap_listen_rec **from, ap_listen_rec **to, - const char *addr, apr_port_t port) +static const char *alloc_listener(process_rec *process, char *addr, + apr_port_t port, const char* proto, + void *slave) { - int found = 0; - - while (*from) { - apr_sockaddr_t *sa = (*from)->bind_addr; + ap_listen_rec **walk, *last; + apr_status_t status; + apr_sockaddr_t *sa; + int found_listener = 0; + /* see if we've got an old listener for this address:port */ + for (walk = &old_listeners; *walk;) { + sa = (*walk)->bind_addr; /* Some listeners are not real so they will not have a bind_addr. */ if (sa) { ap_listen_rec *new; @@ -297,39 +301,19 @@ static int find_listeners(ap_listen_rec **from, ap_listen_rec **to, if (port == oldport && ((!addr && !sa->hostname) || ((addr && sa->hostname) && !strcmp(sa->hostname, addr)))) { - found = 1; - if (!to) { - break; - } - new = *from; - *from = new->next; - new->next = *to; - *to = new; + new = *walk; + *walk = new->next; + new->next = ap_listeners; + ap_listeners = new; + found_listener = 1; continue; } } - from = &(*from)->next; - } - - return found; -} - -static const char *alloc_listener(process_rec *process, const char *addr, - apr_port_t port, const char* proto, - void *slave) -{ - ap_listen_rec *last; - apr_status_t status; - apr_sockaddr_t *sa; - - /* see if we've got a listener for this address:port, which is an error */ - if (find_listeners(&ap_listeners, NULL, addr, port)) { - return "Cannot define multiple Listeners on the same IP:port"; + walk = &(*walk)->next; } - /* see if we've got an old listener for this address:port */ - if (find_listeners(&old_listeners, &ap_listeners, addr, port)) { + if (found_listener) { if (ap_listeners->slave != slave) { return "Cannot define a slave on the same IP:port as a Listener"; } -- 2.40.0