diff options
author | Yann Ylavic <ylavic@apache.org> | 2016-04-14 20:03:58 +0200 |
---|---|---|
committer | Yann Ylavic <ylavic@apache.org> | 2016-04-14 20:03:58 +0200 |
commit | f31bfa756794d6f0f3a525c3a009051294fc85be (patch) | |
tree | 186f04723fca8d4d38dac109e9b28188375fd9c7 /server/scoreboard.c | |
parent | Rebuild (diff) | |
download | apache2-f31bfa756794d6f0f3a525c3a009051294fc85be.tar.xz apache2-f31bfa756794d6f0f3a525c3a009051294fc85be.zip |
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).
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1739146 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'server/scoreboard.c')
-rw-r--r-- | server/scoreboard.c | 94 |
1 files changed, 37 insertions, 57 deletions
diff --git a/server/scoreboard.c b/server/scoreboard.c index af2e9d1f4c..c8264302a1 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) { @@ -499,57 +495,41 @@ static int update_child_status_internal(int child_num, } /* Keep existing values until working again */ - if (status > SERVER_READY) { - int was_ready = (old_status == SERVER_READY); - - if (descr) { - apr_cpystrn(ws->request, descr, sizeof(ws->request)); - } - else if (r) { - copy_request(ws->request, sizeof(ws->request), r); - } - else if (was_ready) { - ws->request[0] = '\0'; - } - - 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)); - } - else if (was_ready) { - ws->client[0] = '\0'; - } + if (descr) { + apr_cpystrn(ws->request, descr, sizeof(ws->request)); + } + else if (r) { + copy_request(ws->request, sizeof(ws->request), r); + } - 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 (was_ready) { - ws->vhost[0] = '\0'; - } + 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 if (was_ready) { - ws->protocol[0] = '\0'; + 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; |