[MEDIUM] session: don't resync FSMs on non-interesting changes

While processing the session, we used to resync the FSMs when buffer
flags changed. But since BF_KERN_SPLICING and BF_READ_DONTWAIT were
introduced, sometimes we could resync after they were set, which is
not what we want. This was because there were some old checks left
which did not mask changes with BF_MASK_STATIC before checking.
This commit is contained in:
Willy Tarreau 2009-03-21 22:09:29 +01:00
parent 1b194fe03e
commit 06bea94266
2 changed files with 6 additions and 6 deletions

View File

@ -805,7 +805,7 @@ struct task *uxst_process_session(struct task *t)
}
s->req->flags &= BF_CLEAR_READ & BF_CLEAR_WRITE & BF_CLEAR_TIMEOUT;
flags &= BF_CLEAR_READ & BF_CLEAR_WRITE & BF_CLEAR_TIMEOUT;
if (s->req->flags != flags)
if ((s->req->flags ^ flags) & BF_MASK_STATIC)
resync = 1;
}
@ -891,7 +891,7 @@ struct task *uxst_process_session(struct task *t)
}
s->rep->flags &= BF_CLEAR_READ & BF_CLEAR_WRITE & BF_CLEAR_TIMEOUT;
flags &= BF_CLEAR_READ & BF_CLEAR_WRITE & BF_CLEAR_TIMEOUT;
if (s->rep->flags != flags)
if ((s->rep->flags ^ flags) & BF_MASK_STATIC)
resync = 1;
}
else if ((s->rep->flags & BF_MASK_ANALYSER) ||
@ -904,7 +904,7 @@ struct task *uxst_process_session(struct task *t)
}
s->rep->flags &= BF_CLEAR_READ & BF_CLEAR_WRITE & BF_CLEAR_TIMEOUT;
flags &= BF_CLEAR_READ & BF_CLEAR_WRITE & BF_CLEAR_TIMEOUT;
if (s->rep->flags != flags)
if ((s->rep->flags ^ flags) & BF_MASK_STATIC)
resync = 1;
}

View File

@ -778,7 +778,7 @@ resync_stream_interface:
s->req->flags &= BF_CLEAR_READ & BF_CLEAR_WRITE & BF_CLEAR_TIMEOUT;
flags &= BF_CLEAR_READ & BF_CLEAR_WRITE & BF_CLEAR_TIMEOUT;
if (s->req->flags != flags)
if ((s->req->flags ^ flags) & BF_MASK_STATIC)
resync = 1;
}
@ -925,7 +925,7 @@ resync_stream_interface:
}
s->rep->flags &= BF_CLEAR_READ & BF_CLEAR_WRITE & BF_CLEAR_TIMEOUT;
flags &= BF_CLEAR_READ & BF_CLEAR_WRITE & BF_CLEAR_TIMEOUT;
if (s->rep->flags != flags)
if ((s->rep->flags ^ flags) & BF_MASK_STATIC)
resync = 1;
}
else if ((s->rep->flags & BF_MASK_ANALYSER) ||
@ -956,7 +956,7 @@ resync_stream_interface:
s->rep->flags &= BF_CLEAR_READ & BF_CLEAR_WRITE & BF_CLEAR_TIMEOUT;
flags &= BF_CLEAR_READ & BF_CLEAR_WRITE & BF_CLEAR_TIMEOUT;
if (s->rep->flags != flags)
if ((s->rep->flags ^ flags) & BF_MASK_STATIC)
resync = 1;
}