--- libapache-mod-jk-1.2.22~/native/common/jk_lb_worker.c 2007-04-10 03:45:43.000000000 +0800 +++ libapache-mod-jk-1.2.22~/native/common/jk_lb_worker.c 2007-05-09 10:56:27.000000000 +0800 @@ -619,7 +619,6 @@ static worker_record_t *find_best_byvalue(lb_worker_t *p, jk_logger_t *l) { - static unsigned int next_offset = 0; unsigned int i; unsigned int j; unsigned int offset; @@ -629,7 +628,7 @@ /* find the least busy worker */ worker_record_t *candidate = NULL; - offset = next_offset; + offset = p->next_offset; /* First try to see if we have available candidate */ for (j = offset; j < p->num_of_workers + offset; j++) { @@ -645,7 +644,7 @@ candidate = &p->lb_workers[i]; curmin = p->lb_workers[i].s->lb_value; d = p->lb_workers[i].s->distance; - next_offset = i + 1; + p->next_offset = i + 1; } } } @@ -1303,6 +1302,7 @@ } } p->num_of_workers = num_of_workers; + p->next_offset = 0; update_mult(p, l); for (i = 0; i < num_of_workers; i++) { for (j = 0; j < i; j++) { --- libapache-mod-jk-1.2.22~/native/common/jk_lb_worker.h 2007-01-27 22:41:05.000000000 +0800 +++ libapache-mod-jk-1.2.22~/native/common/jk_lb_worker.h 2007-05-09 10:56:27.000000000 +0800 @@ -132,6 +132,7 @@ { worker_record_t *lb_workers; unsigned int num_of_workers; + unsigned int next_offset; char name[JK_SHM_STR_SIZ+1]; int sticky_session; int sticky_session_force;