BUG/MEDIUM: process_stream(): Don't wake the task if no new data was received.
At the eand of process_stream(), we wake the task if there's something in
the input buffer, after attempting a recv. However this is wrong, and we should
only do so if we received new data. Just check the CF_READ_PARTIAL flag.
This is 1.9-specific and should not be backported.
diff --git a/src/stream.c b/src/stream.c
index e75491e..266f3b1 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -2504,13 +2504,13 @@
if (cs && !(cs->conn->flags & CO_FL_ERROR)) {
ret |= si_cs_send(cs);
si_cs_recv(cs);
- ret |= (ci_data(si_ic(si_f)) != 0 ) | (cs->conn->flags & CO_FL_ERROR);
+ ret |= (si_ic(si_f)->flags & CF_READ_PARTIAL) | (cs->conn->flags & CO_FL_ERROR);
}
cs = objt_cs(si_b->end);
if (cs && !(cs->conn->flags & CO_FL_ERROR)) {
ret |= si_cs_send(cs);
si_cs_recv(cs);
- ret |= (ci_data(si_ic(si_b)) != 0 ) | (cs->conn->flags & CO_FL_ERROR);
+ ret |= (si_ic(si_b)->flags & CF_READ_PARTIAL) | (cs->conn->flags & CO_FL_ERROR);
}
if (ret)