]> granicus.if.org Git - apache/commitdiff
scoreboard/status: follow up to r1739008.
authorYann Ylavic <ylavic@apache.org>
Thu, 14 Apr 2016 18:03:58 +0000 (18:03 +0000)
committerYann Ylavic <ylavic@apache.org>
Thu, 14 Apr 2016 18:03:58 +0000 (18:03 +0000)
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

server/scoreboard.c

index af2e9d1f4c6d30439d7541d4b57fccb12c9c8e1f..c8264302a12566604f7f580eaa1104427fd219c2 100644 (file)
@@ -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;