]> granicus.if.org Git - apache/commitdiff
Worker shared data has to be visible across all child processes,
authorMladen Turk <mturk@apache.org>
Wed, 15 Sep 2004 12:08:39 +0000 (12:08 +0000)
committerMladen Turk <mturk@apache.org>
Wed, 15 Sep 2004 12:08:39 +0000 (12:08 +0000)
so remove creating that data on per-child basis.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@105134 13f79535-47bb-0310-9956-ffa450edef68

include/scoreboard.h
server/scoreboard.c

index 59f1e9418a9836025fbd0b117ce581115cd30423..0a045d1859d31d1a31cdc37885b018b4db51fd16 100644 (file)
@@ -153,7 +153,7 @@ typedef struct {
     global_score *global;
     process_score *parent;
     worker_score **servers;
-    lb_score     **balancers;
+    lb_score     *balancers;
 } scoreboard;
 
 typedef struct ap_sb_handle_t ap_sb_handle_t;
@@ -179,7 +179,7 @@ void ap_time_process_request(int child_num, int thread_num, int status);
 AP_DECLARE(worker_score *) ap_get_scoreboard_worker(int x, int y);
 AP_DECLARE(process_score *) ap_get_scoreboard_process(int x);
 AP_DECLARE(global_score *) ap_get_scoreboard_global(void);
-AP_DECLARE(lb_score *) ap_get_scoreboard_lb(int child_num, int lb_num);
+AP_DECLARE(lb_score *) ap_get_scoreboard_lb(int lb_num);
 
 AP_DECLARE_DATA extern scoreboard *ap_scoreboard_image;
 AP_DECLARE_DATA extern const char *ap_scoreboard_fname;
index df4dddf0869d2181479da5dc4670620acd679b4a..ef545e0ac8879be2e1840b1698594d7ee60d5040 100644 (file)
@@ -104,7 +104,7 @@ AP_DECLARE(int) ap_calc_scoreboard_size(void)
     scoreboard_size += sizeof(process_score) * server_limit;
     scoreboard_size += sizeof(worker_score) * server_limit * thread_limit;
     if (lb_limit)
-        scoreboard_size += sizeof(lb_score) * server_limit * lb_limit;
+        scoreboard_size += sizeof(lb_score) * lb_limit;
 
     return scoreboard_size;
 }
@@ -130,13 +130,8 @@ void ap_init_scoreboard(void *shared_score)
         more_storage += thread_limit * sizeof(worker_score);
     }
     if (lb_limit) {
-        ap_scoreboard_image->balancers = 
-            (lb_score **)((char*)ap_scoreboard_image + sizeof(scoreboard) +
-                               server_limit * sizeof(worker_score *));
-        for (i = 0; i < server_limit; i++) {
-            ap_scoreboard_image->balancers[i] = (lb_score *)more_storage;
-            more_storage += lb_limit * sizeof(lb_score);
-        }
+        ap_scoreboard_image->balancers = (lb_score *)more_storage;
+        more_storage += lb_limit * sizeof(lb_score);
     }    
     ap_assert(more_storage == (char*)shared_score + scoreboard_size);
     ap_scoreboard_image->global->server_limit = server_limit;
@@ -287,10 +282,8 @@ int ap_create_scoreboard(apr_pool_t *p, ap_scoreboard_e sb_type)
         }
         /* Clean up the lb workers data */
         if (lb_limit) {
-            for (i = 0; i < server_limit; i++) {
-                memset(ap_scoreboard_image->balancers[i], 0,
-                       sizeof(lb_score) * lb_limit);
-            }
+            memset(ap_scoreboard_image->balancers, 0,
+                   sizeof(lb_score) * lb_limit);
         }        
         return OK;
     }
@@ -495,11 +488,10 @@ AP_DECLARE(global_score *) ap_get_scoreboard_global()
     return ap_scoreboard_image->global;
 }
 
-AP_DECLARE(lb_score *) ap_get_scoreboard_lb(int child_num, int lb_num)
+AP_DECLARE(lb_score *) ap_get_scoreboard_lb(int lb_num)
 {
-    if (((child_num < 0) || (server_limit < child_num)) ||
-        ((lb_num < 0) || (lb_limit < lb_num))) {
+    if (((lb_num < 0) || (lb_limit < lb_num))) {
         return(NULL); /* Out of range */
     }
-    return &ap_scoreboard_image->balancers[child_num][lb_num];
+    return &ap_scoreboard_image->balancers[lb_num];
 }