> -----Ursprüngliche Nachricht----- > Von: jean-frederic clere > Gesendet: Mittwoch, 12. September 2007 10:34 > An: [email protected] > Betreff: Re: svn commit: r573264 - > /httpd/httpd/trunk/include/scoreboard.h > > > Ruediger Pluem wrote: > > > > On 09/11/2007 10:51 PM, Jim Jagielski wrote: > > > >> I would also suggest that we keep ap_proxy_lb_workers > >> in proxy_util.c (as it currently is), since even > >> though its not part of the API, other proxy module > >> make have a need for it (and again, keeping the > >> number of changes to a minimum). > > > > +1. That means also to keep it in mod_proxy.h. > > But we shouldn't do the same mistake with ap_proxy_lb_worker_size(). > > So keep it static in mod_proxy.c. > > Ok I have committed the patch taking in account all the comments.
Sorry, but I have still some comments :-). Modified: httpd/httpd/trunk/modules/proxy/mod_proxy.c URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy.c?rev=574843&r1=574842&r2=574843&view=diff ============================================================================== --- httpd/httpd/trunk/modules/proxy/mod_proxy.c (original) +++ httpd/httpd/trunk/modules/proxy/mod_proxy.c Wed Sep 12 01:34:40 2007 @@ -37,6 +37,17 @@ #define MAX(x,y) ((x) >= (y) ? (x) : (y)) #endif +/* Global balancer counter */ +static int lb_workers_limit = 0; Why having it here again? It is not used in mod_proxy.c and we have it in proxy_util.c Modified: httpd/httpd/trunk/server/scoreboard.c URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/scoreboard.c?rev=574843&r1=574842&r2=574843&view=diff ============================================================================== --- httpd/httpd/trunk/server/scoreboard.c (original) +++ httpd/httpd/trunk/server/scoreboard.c Wed Sep 12 01:34:40 2007 @@ -101,11 +103,18 @@ else lb_limit = 0; + if (!pfn_proxy_lb_worker_size) + pfn_proxy_lb_worker_size = APR_RETRIEVE_OPTIONAL_FN(ap_proxy_lb_worker_size); + if (pfn_proxy_lb_worker_size) + worker_size = pfn_proxy_lb_worker_size(); + else + worker_size = sizeof(lb_score); + scoreboard_size = sizeof(global_score); scoreboard_size += sizeof(process_score) * server_limit; scoreboard_size += sizeof(worker_score) * server_limit * thread_limit; - if (lb_limit) - scoreboard_size += sizeof(lb_score) * lb_limit; + if (lb_limit && worker_size) The check for worker_size is not needed as worker_size is never zero. + scoreboard_size += worker_size * lb_limit; return scoreboard_size; } @@ -129,9 +138,9 @@ ap_scoreboard_image->servers[i] = (worker_score *)more_storage; more_storage += thread_limit * sizeof(worker_score); } - if (lb_limit) { - ap_scoreboard_image->balancers = (lb_score *)more_storage; - more_storage += lb_limit * sizeof(lb_score); + if (lb_limit && worker_size) { The check for worker_size is not needed as worker_size is never zero. + ap_scoreboard_image->balancers = (void *)more_storage; + more_storage += lb_limit * worker_size; } ap_assert(more_storage == (char*)shared_score + scoreboard_size); ap_scoreboard_image->global->server_limit = server_limit; @@ -281,9 +290,9 @@ sizeof(worker_score) * thread_limit); } /* Clean up the lb workers data */ - if (lb_limit) { + if (lb_limit && worker_size) { The check for worker_size is not needed as worker_size is never zero. memset(ap_scoreboard_image->balancers, 0, - sizeof(lb_score) * lb_limit); + worker_size * lb_limit); } return OK; } @@ -490,8 +499,10 @@ AP_DECLARE(lb_score *) ap_get_scoreboard_lb(int lb_num) { - if (((lb_num < 0) || (lb_limit < lb_num))) { + char *ptr; + if (((lb_num < 0) || (lb_limit < lb_num)) || (worker_size==0)) { The check for worker_size is not needed as worker_size is never zero. return(NULL); /* Out of range */ } - return &ap_scoreboard_image->balancers[lb_num]; + ptr = (char *) ap_scoreboard_image->balancers + lb_num*worker_size; + return (lb_score *) ptr; } Regards Rüdiger
