From 666bf9a300a101898b38d1274152b2855f981a75 Mon Sep 17 00:00:00 2001 From: Jim Jagielski Date: Wed, 27 Apr 2016 12:24:54 +0000 Subject: [PATCH] Merge r1739008, r1739146, r1739151, r1739193 from trunk: scoreboard/status: Keep previous worker connection/request data when idle as prior to 2.4.20. scoreboard/status: follow up to r1739008. Restore (completely) pre-2.4.20 behaviour w.r.t. preserved values. r1739008 was still unnessessarily blanking some values for the time of BUSY_READ -> BUSY_WRITE (with blocking MPMs). scoreboard/status: follow up to 1739146. Comment not needed anymore... Clarify CHANGES entry, including the correct version for the restored behaviour. Submitted by: ylavic Reviewed/backported by: jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1741240 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 3 ++ STATUS | 11 ------ server/scoreboard.c | 88 +++++++++++++++++++++------------------------ 3 files changed, 43 insertions(+), 59 deletions(-) diff --git a/CHANGES b/CHANGES index 61fd6f3c5e..3c632d699a 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,9 @@ Changes with Apache 2.4.21 + *) scoreboard/status: Restore behavior of showing workers' previous Client, + VHost and Request values when idle, like in 2.4.18 and earlier. + *) mod_http2: r->protocol changed to "HTTP/2.0" (was "HTTP/2") as this will give expected syntax in CGI's SERVER_PROTOCOL is more compatible with existing major/minor handling. Fixes PR 59313. diff --git a/STATUS b/STATUS index 7adf7ab3a1..439f5ff125 100644 --- a/STATUS +++ b/STATUS @@ -114,17 +114,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - *) scoreboard/status: Keep previous worker connection/request data when idle as - prior to 2.4.20. - trunk patch: http://svn.apache.org/r1739008 - trunk patch: http://svn.apache.org/r1739146 - trunk patch: http://svn.apache.org/r1739151 - trunk patch: http://svn.apache.org/r1739193 - 2.4.x patch: trunk works (modulo CHANGES) or - http://home.apache.org/~ylavic/patches/httpd-2.4.x-scoreboard_preserve-v2.patch - +1: ylavic, rpluem, jim - ylavic: diff with 2.4.18 after this merge: - http://home.apache.org/~ylavic/patches/scoreboard-2.4.18.diff PATCHES PROPOSED TO BACKPORT FROM TRUNK: diff --git a/server/scoreboard.c b/server/scoreboard.c index 7dc6ae25a6..007a5e8837 100644 --- a/server/scoreboard.c +++ b/server/scoreboard.c @@ -464,22 +464,18 @@ static int update_child_status_internal(int child_num, { int old_status; worker_score *ws; - process_score *ps; int mpm_generation; ws = &ap_scoreboard_image->servers[child_num][thread_num]; old_status = ws->status; - if (status >= 0) { - ws->status = status; - - ps = &ap_scoreboard_image->parent[child_num]; - - if (status == SERVER_READY - && old_status == SERVER_STARTING) { - ws->thread_num = child_num * thread_limit + thread_num; - ap_mpm_query(AP_MPMQ_GENERATION, &mpm_generation); - ps->generation = mpm_generation; - } + ws->status = status; + + if (status == SERVER_READY + && old_status == SERVER_STARTING) { + process_score *ps = &ap_scoreboard_image->parent[child_num]; + ws->thread_num = child_num * thread_limit + thread_num; + ap_mpm_query(AP_MPMQ_GENERATION, &mpm_generation); + ps->generation = mpm_generation; } if (ap_extended_status) { @@ -497,46 +493,42 @@ static int update_child_status_internal(int child_num, ws->conn_bytes = 0; ws->last_used = apr_time_now(); } - if (status == SERVER_READY) { - ws->client[0]='\0'; - ws->vhost[0]='\0'; - ws->request[0]='\0'; - ws->protocol[0]='\0'; + + if (descr) { + apr_cpystrn(ws->request, descr, sizeof(ws->request)); } - else { - if (descr) { - apr_cpystrn(ws->request, descr, sizeof(ws->request)); - } - else if (r) { - copy_request(ws->request, sizeof(ws->request), r); - } - if (r) { - if (!(val = ap_get_useragent_host(r, REMOTE_NOLOOKUP, NULL))) - apr_cpystrn(ws->client, r->useragent_ip, sizeof(ws->client)); - else - apr_cpystrn(ws->client, val, sizeof(ws->client)); - } - else if (c) { - if (!(val = ap_get_remote_host(c, c->base_server->lookup_defaults, - REMOTE_NOLOOKUP, NULL))) - apr_cpystrn(ws->client, c->client_ip, sizeof(ws->client)); - else - apr_cpystrn(ws->client, val, sizeof(ws->client)); - } - if (s) { - if (c) { - apr_snprintf(ws->vhost, sizeof(ws->vhost), "%s:%d", - s->server_hostname, c->local_addr->port); - } - else { - apr_cpystrn(ws->vhost, s->server_hostname, sizeof(ws->vhost)); - } - } + else if (r) { + copy_request(ws->request, sizeof(ws->request), r); + } + + if (r) { + if (!(val = ap_get_useragent_host(r, REMOTE_NOLOOKUP, NULL))) + apr_cpystrn(ws->client, r->useragent_ip, sizeof(ws->client)); + else + apr_cpystrn(ws->client, val, sizeof(ws->client)); + } + else if (c) { + if (!(val = ap_get_remote_host(c, c->base_server->lookup_defaults, + REMOTE_NOLOOKUP, NULL))) + apr_cpystrn(ws->client, c->client_ip, sizeof(ws->client)); + else + apr_cpystrn(ws->client, val, sizeof(ws->client)); + } + + if (s) { if (c) { - val = ap_get_protocol(c); - apr_cpystrn(ws->protocol, val, sizeof(ws->protocol)); + apr_snprintf(ws->vhost, sizeof(ws->vhost), "%s:%d", + s->server_hostname, c->local_addr->port); + } + else { + apr_cpystrn(ws->vhost, s->server_hostname, sizeof(ws->vhost)); } } + + if (c) { + val = ap_get_protocol(c); + apr_cpystrn(ws->protocol, val, sizeof(ws->protocol)); + } } return old_status; -- 2.40.0