From 06bea9426617699b5bf849c4cc7813572e066f14 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Sat, 21 Mar 2009 22:09:29 +0100 Subject: [PATCH] [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. --- src/proto_uxst.c | 6 +++--- src/session.c | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/proto_uxst.c b/src/proto_uxst.c index 0edc2aff2..0eaea3c40 100644 --- a/src/proto_uxst.c +++ b/src/proto_uxst.c @@ -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; } diff --git a/src/session.c b/src/session.c index 6bb6a4537..9c06065f5 100644 --- a/src/session.c +++ b/src/session.c @@ -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; }