Author: mturk Date: Mon Mar 19 14:40:15 2012 New Revision: 1302479 URL: http://svn.apache.org/viewvc?rev=1302479&view=rev Log: Make sure we pull only if the sequence is above us
Modified: tomcat/jk/trunk/native/common/jk_lb_worker.c Modified: tomcat/jk/trunk/native/common/jk_lb_worker.c URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_lb_worker.c?rev=1302479&r1=1302478&r2=1302479&view=diff ============================================================================== --- tomcat/jk/trunk/native/common/jk_lb_worker.c (original) +++ tomcat/jk/trunk/native/common/jk_lb_worker.c Mon Mar 19 14:40:15 2012 @@ -295,7 +295,7 @@ void jk_lb_pull(lb_worker_t *p, int lock p->name, p->sequence, p->s->h.sequence); if (locked == JK_FALSE) jk_shm_lock(); - if (p->sequence > p->s->h.sequence) { + if (p->sequence == p->s->h.sequence) { if (locked == JK_FALSE) jk_shm_unlock(); return; @@ -315,7 +315,7 @@ void jk_lb_pull(lb_worker_t *p, int lock 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 (w->sequence < w->s->h.sequence) { jk_worker_t *jw = w->worker; ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private; @@ -365,13 +365,12 @@ void jk_lb_push(lb_worker_t *p, int lock p->s->lbmethod = p->lbmethod; p->s->lblock = p->lblock; p->s->max_packet_size = p->max_packet_size; - p->s->h.sequence = p->sequence; strncpy(p->s->session_cookie, p->session_cookie, JK_SHM_STR_SIZ); strncpy(p->s->session_path, p->session_path, JK_SHM_STR_SIZ); 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 (w->sequence < w->s->h.sequence) { jk_worker_t *jw = w->worker; ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private; @@ -391,6 +390,7 @@ void jk_lb_push(lb_worker_t *p, int lock w->s->h.sequence = w->sequence; } } + p->s->h.sequence = p->sequence; if (locked == JK_FALSE) jk_shm_unlock(); @@ -562,7 +562,7 @@ static int recover_workers(lb_worker_t * ajp_worker_t *aw = NULL; JK_TRACE_ENTER(l); - if (p->sequence != p->s->h.sequence) + if (p->sequence < p->s->h.sequence) jk_lb_pull(p, JK_TRUE, l); for (i = 0; i < p->num_of_workers; i++) { w = &p->lb_workers[i]; @@ -1146,7 +1146,7 @@ static int JK_METHOD service(jk_endpoint /* Set returned error to OK */ *is_error = JK_HTTP_OK; - if (p->worker->sequence != p->worker->s->h.sequence) + if (p->worker->sequence < p->worker->s->h.sequence) jk_lb_pull(p->worker, JK_FALSE, l); for (i = 0; i < num_of_workers; i++) { lb_sub_worker_t *rec = &(p->worker->lb_workers[i]); @@ -1206,7 +1206,7 @@ static int JK_METHOD service(jk_endpoint retry, p->worker->retry_interval); jk_sleep(p->worker->retry_interval); /* Pull shared memory if something changed during sleep */ - if (p->worker->sequence != p->worker->s->h.sequence) + if (p->worker->sequence < p->worker->s->h.sequence) jk_lb_pull(p->worker, JK_FALSE, l); for (i = 0; i < num_of_workers; i++) { /* Copy the shared state info */ @@ -1631,7 +1631,6 @@ static int JK_METHOD validate(jk_worker_ strncpy(p->lb_workers[i].s->h.name, worker_names[i], JK_SHM_STR_SIZ); p->lb_workers[i].sequence = 0; - p->lb_workers[i].s->h.sequence = 0; p->lb_workers[i].lb_factor = jk_get_lb_factor(props, worker_names[i]); if (p->lb_workers[i].lb_factor < 1) { @@ -1786,7 +1785,7 @@ static int JK_METHOD init(jk_worker_t *p } p->sequence++; - jk_lb_push(p, JK_FALSE, log); + jk_lb_push(p, JK_TRUE, log); JK_TRACE_EXIT(log); return JK_TRUE; @@ -1878,7 +1877,6 @@ int JK_METHOD lb_worker_factory(jk_worke private_data->error_escalation_time = private_data->recover_wait_time / 2; private_data->max_reply_timeouts = 0; private_data->sequence = 0; - private_data->s->h.sequence = 0; private_data->next_offset = 0; *w = &private_data->worker; JK_TRACE_EXIT(l); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org