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: [email protected]
For additional commands, e-mail: [email protected]