69 lines
3.0 KiB
Diff
69 lines
3.0 KiB
Diff
diff --git a/modules/proxy/mod_proxy_hcheck.c b/modules/proxy/mod_proxy_hcheck.c
|
|
index 70f1de8..70bfa26 100644
|
|
--- a/modules/proxy/mod_proxy_hcheck.c
|
|
+++ b/modules/proxy/mod_proxy_hcheck.c
|
|
@@ -992,12 +992,30 @@ static apr_status_t hc_watchdog_callback(int state, void *data,
|
|
sctx_t *ctx = (sctx_t *)data;
|
|
server_rec *s = ctx->s;
|
|
proxy_server_conf *conf;
|
|
+ proxy_worker **workers;
|
|
+ proxy_worker *worker;
|
|
+ apr_time_t now;
|
|
+ int i, n;
|
|
+
|
|
+ conf = (proxy_server_conf *) ap_get_module_config(s->module_config, &proxy_module);
|
|
+ balancer = (proxy_balancer *)conf->balancers->elts;
|
|
|
|
switch (state) {
|
|
case AP_WATCHDOG_STATE_STARTING:
|
|
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(03258)
|
|
"%s watchdog started.",
|
|
HCHECK_WATHCHDOG_NAME);
|
|
+ /* set last update time for all workers */
|
|
+ now = apr_time_now();
|
|
+ for (i = 0; i < conf->balancers->nelts; i++, balancer++) {
|
|
+ workers = (proxy_worker **)balancer->workers->elts;
|
|
+ for (n = 0; n < balancer->workers->nelts; n++, ++workers) {
|
|
+ worker = *workers;
|
|
+ if (worker->s->updated == 0) {
|
|
+ worker->s->updated = now;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
#if HC_USE_THREADS
|
|
if (tpsize && hctp == NULL) {
|
|
rv = apr_thread_pool_create(&hctp, tpsize,
|
|
@@ -1023,21 +1041,13 @@ static apr_status_t hc_watchdog_callback(int state, void *data,
|
|
|
|
case AP_WATCHDOG_STATE_RUNNING:
|
|
/* loop thru all workers */
|
|
- if (s) {
|
|
- int i;
|
|
- conf = (proxy_server_conf *) ap_get_module_config(s->module_config, &proxy_module);
|
|
- balancer = (proxy_balancer *)conf->balancers->elts;
|
|
- ctx->s = s;
|
|
+ {
|
|
+ now = apr_time_now();
|
|
for (i = 0; i < conf->balancers->nelts; i++, balancer++) {
|
|
- int n;
|
|
- apr_time_t now;
|
|
- proxy_worker **workers;
|
|
- proxy_worker *worker;
|
|
/* Have any new balancers or workers been added dynamically? */
|
|
ap_proxy_sync_balancer(balancer, s, conf);
|
|
workers = (proxy_worker **)balancer->workers->elts;
|
|
- now = apr_time_now();
|
|
- for (n = 0; n < balancer->workers->nelts; n++) {
|
|
+ for (n = 0; n < balancer->workers->nelts; n++, workers++) {
|
|
worker = *workers;
|
|
if (!PROXY_WORKER_IS(worker, PROXY_WORKER_STOPPED) &&
|
|
(worker->s->method != NONE) &&
|
|
@@ -1077,7 +1087,6 @@ static apr_status_t hc_watchdog_callback(int state, void *data,
|
|
hc_check(NULL, baton);
|
|
}
|
|
}
|
|
- workers++;
|
|
}
|
|
}
|
|
}
|