--- a/native/common/jk_status.c +++ a/native/common/jk_status.c @@ -3625,6 +3625,13 @@ static int commit_member(jk_ws_service_t *s, return rc; } +static void force_subworker_update(lb_worker_t *lb) { + unsigned int i; + for (i = 0; i < lb->num_of_workers; i++) { + lb->lb_workers[i].sequence = -1; + } +} + static void commit_all_members(jk_ws_service_t *s, status_endpoint_t *p, jk_worker_t *jw, @@ -3887,9 +3894,11 @@ static void commit_all_members(jk_ws_service_t *s, } 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); + force_subworker_update(lb); + } if (rc) { lb->sequence = -1; jk_lb_push(lb, JK_TRUE, l); @@ -4395,16 +4404,18 @@ static int update_worker(jk_ws_service_t *s, if (rv & JK_STATUS_NEEDS_ADDR_PUSH) { aw->addr_sequence = -1; } + 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); + force_subworker_update(lb); + } 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 (rc == JK_FALSE) { jk_log(l, JK_LOG_ERROR, "Status worker '%s' failed updating sub worker '%s' (at least partially).%s",