From 0703f437c015054913d763ef525c42de5d97c763 Mon Sep 17 00:00:00 2001 From: Jim Jagielski Date: Fri, 7 Sep 2007 13:13:37 +0000 Subject: [PATCH] Reinstate the lb_score patch, but, protect against conflicting leakage as per jfc proposal. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@573569 13f79535-47bb-0310-9956-ffa450edef68 --- include/scoreboard.h | 9 ++++----- modules/proxy/mod_proxy.c | 21 +++++++++++++++++++++ modules/proxy/mod_proxy.h | 7 ------- modules/proxy/proxy_util.c | 13 ------------- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/include/scoreboard.h b/include/scoreboard.h index 1e934cd29cf..6f8b42e394c 100644 --- a/include/scoreboard.h +++ b/include/scoreboard.h @@ -45,6 +45,9 @@ extern "C" { #define DEFAULT_SCOREBOARD "logs/apache_runtime_status" #endif +/* for proxy_worker_stat */ +#include "../modules/proxy/mod_proxy.h" + /* Scoreboard info on a process is, for now, kept very brief --- * just status value and pid (the latter so that the caretaker process * can properly update the scoreboard when a process dies). We may want @@ -142,11 +145,7 @@ struct process_score { }; /* stuff which is lb specific */ -typedef struct lb_score lb_score; -struct lb_score { - /* TODO: sync this with proxy_worker_stat */ - unsigned char data[256]; -}; +typedef proxy_worker_stat lb_score; /* Scoreboard is now in 'local' memory, since it isn't updated once created, * even in forked architectures. Child created-processes (non-fork) will diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c index 93921b87616..5ccd9e25b56 100644 --- a/modules/proxy/mod_proxy.c +++ b/modules/proxy/mod_proxy.c @@ -37,6 +37,27 @@ APR_DECLARE_OPTIONAL_FN(char *, ssl_var_lookup, #define MAX(x,y) ((x) >= (y) ? (x) : (y)) #endif +/* Global balancer counter */ +extern int PROXY_DECLARE_DATA proxy_lb_workers; +static int lb_workers_limit = 0; + +/** + * Calculate number of maximum number of workers in scoreboard. + * @return number of workers to allocate in the scoreboard + */ +static int ap_proxy_lb_workers(void) +{ + /* + * Since we can't resize the scoreboard when reconfiguring, we + * have to impose a limit on the number of workers, we are + * able to reconfigure to. + */ + if (!lb_workers_limit) + lb_workers_limit = proxy_lb_workers + PROXY_DYNAMIC_BALANCER_LIMIT; + return lb_workers_limit; +} + + /* * A Web proxy module. Stages: * diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index 32e03131552..bb0b9c81442 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -730,16 +730,9 @@ PROXY_DECLARE(void) ap_proxy_backend_broke(request_rec *r, * If this limit is reached you must stop and restart the server. */ #define PROXY_DYNAMIC_BALANCER_LIMIT 16 -/** - * Calculate number of maximum number of workers in scoreboard. - * @return number of workers to allocate in the scoreboard - */ -int ap_proxy_lb_workers(void); /* For proxy_util */ extern module PROXY_DECLARE_DATA proxy_module; -extern int PROXY_DECLARE_DATA proxy_lb_workers; - #endif /*MOD_PROXY_H*/ /** @} */ diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index e35b9cdc35f..47889fbadb5 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -31,7 +31,6 @@ /* Global balancer counter */ int PROXY_DECLARE_DATA proxy_lb_workers = 0; -static int lb_workers_limit = 0; static int proxy_match_ipaddr(struct dirconn_entry *This, request_rec *r); static int proxy_match_domainname(struct dirconn_entry *This, request_rec *r); @@ -2311,18 +2310,6 @@ PROXY_DECLARE(int) ap_proxy_connection_create(const char *proxy_function, return OK; } -int ap_proxy_lb_workers(void) -{ - /* - * Since we can't resize the scoreboard when reconfiguring, we - * have to impose a limit on the number of workers, we are - * able to reconfigure to. - */ - if (!lb_workers_limit) - lb_workers_limit = proxy_lb_workers + PROXY_DYNAMIC_BALANCER_LIMIT; - return lb_workers_limit; -} - PROXY_DECLARE(void) ap_proxy_backend_broke(request_rec *r, apr_bucket_brigade *brigade) { -- 2.47.2