MEDIUM: stream: don't abusively loop back on changes on CF_SHUT*_NOW
These flags are not used by analysers, only by the shut* functions, and
they were covered by CF_MASK_STATIC only because in the past the shut
functions were in the middle of the analysers. But here they are causing
excess loop backs which provide no value and increase processing cost.
Ideally the CF_MASK_STATIC bitfield should be revisited, but doing this
alone is enough to reduce by 30% the number of calls to si_sync_send().
diff --git a/src/stream.c b/src/stream.c
index 860f2fd..e536ee2 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -2144,7 +2144,7 @@
req->flags &= ~CF_WAKE_ONCE;
rqf_last = req->flags;
- if ((req->flags ^ flags) & CF_MASK_STATIC)
+ if ((req->flags ^ flags) & (CF_SHUTR|CF_SHUTW))
goto resync_request;
}
@@ -2213,7 +2213,7 @@
res->flags &= ~CF_WAKE_ONCE;
rpf_last = res->flags;
- if ((res->flags ^ flags) & CF_MASK_STATIC)
+ if ((res->flags ^ flags) & (CF_SHUTR|CF_SHUTW))
goto resync_response;
}
@@ -2500,7 +2500,7 @@
goto resync_stream_interface;
/* otherwise we want to check if we need to resync the req buffer or not */
- if ((req->flags ^ rqf_last) & CF_MASK_STATIC)
+ if ((req->flags ^ rqf_last) & (CF_SHUTR|CF_SHUTW))
goto resync_request;
/* perform output updates to the response buffer */