--- native/common/jk_lb_worker.c (revision 1816081) +++ native/common/jk_lb_worker.c (working copy) @@ -369,7 +369,7 @@ } /* Syncing config values to shm */ -void jk_lb_push(lb_worker_t *p, int locked, jk_logger_t *l) +void jk_lb_push(lb_worker_t *p, int locked, int push_all_members, jk_logger_t *l) { unsigned int i = 0; @@ -394,7 +394,7 @@ for (i = 0; i < p->num_of_workers; i++) { lb_sub_worker_t *w = &p->lb_workers[i]; - if (w->sequence != w->s->h.sequence) { + if (push_all_members == JK_TRUE || w->sequence != w->s->h.sequence) { jk_worker_t *jw = w->worker; ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private; @@ -1959,7 +1959,7 @@ if (p->s->h.sequence == 0) { /* Set configuration data to shared memory */ - jk_lb_push(p, JK_TRUE, log); + jk_lb_push(p, JK_TRUE, JK_FALSE, log); } else { /* Shared memory for this worker is already configured. --- native/common/jk_lb_worker.h (revision 1816081) +++ native/common/jk_lb_worker.h (working copy) @@ -219,7 +219,7 @@ int jk_lb_get_activation_code(const char *v); void reset_lb_values(lb_worker_t *p, jk_logger_t *l); void jk_lb_pull(lb_worker_t * p, int locked, jk_logger_t *l); -void jk_lb_push(lb_worker_t * p, int locked, jk_logger_t *l); +void jk_lb_push(lb_worker_t * p, int locked, int push_all_members, jk_logger_t *l); void update_mult(lb_worker_t * p, jk_logger_t *l); #ifdef __cplusplus --- native/common/jk_status.c (revision 1816081) +++ native/common/jk_status.c (working copy) @@ -3350,7 +3350,7 @@ } if (sync_needed == JK_TRUE) { lb->sequence = -1; - jk_lb_push(lb, JK_TRUE, l); + jk_lb_push(lb, JK_TRUE, JK_FALSE, l); } } @@ -3640,6 +3640,7 @@ int i; int rc = 0; unsigned int j; + int push_all_members = JK_FALSE; JK_TRACE_ENTER(l); if (!attribute) { @@ -3887,12 +3888,14 @@ } if (rc == 1) reset_lb_values(lb, l); - else if (rc == 2) + else if (rc == 2) { /* Recalculate the load multiplicators wrt. lb_factor */ update_mult(lb, l); + push_all_members = JK_TRUE; + } if (rc) { lb->sequence = -1; - jk_lb_push(lb, JK_TRUE, l); + jk_lb_push(lb, JK_TRUE, push_all_members, l); } } JK_TRACE_EXIT(l); @@ -4395,16 +4398,16 @@ if (rv & JK_STATUS_NEEDS_ADDR_PUSH) { aw->addr_sequence = -1; } - if (rv & (JK_STATUS_NEEDS_PUSH | JK_STATUS_NEEDS_ADDR_PUSH)) { - wr->sequence = -1; - lb->sequence = -1; - jk_lb_push(lb, JK_TRUE, l); - } if (rv & JK_STATUS_NEEDS_RESET_LB_VALUES) reset_lb_values(lb, l); if (rv & JK_STATUS_NEEDS_UPDATE_MULT) /* Recalculate the load multiplicators wrt. lb_factor */ update_mult(lb, l); + if (rv & (JK_STATUS_NEEDS_PUSH | JK_STATUS_NEEDS_ADDR_PUSH)) { + wr->sequence = -1; + lb->sequence = -1; + jk_lb_push(lb, JK_TRUE, rv & JK_STATUS_NEEDS_UPDATE_MULT ? JK_TRUE: JK_FALSE, l); + } if (rc == JK_FALSE) { jk_log(l, JK_LOG_ERROR, "Status worker '%s' failed updating sub worker '%s' (at least partially).%s",