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.
This commit is contained in:
Olivier Houchard 2018-09-28 14:38:51 +02:00 committed by Christopher Faulet
parent 61d322fa9e
commit d48d6d284e

View File

@ -2504,13 +2504,13 @@ struct task *process_stream(struct task *t, void *context, unsigned short state)
if (cs && !(cs->conn->flags & CO_FL_ERROR)) { if (cs && !(cs->conn->flags & CO_FL_ERROR)) {
ret |= si_cs_send(cs); ret |= si_cs_send(cs);
si_cs_recv(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); cs = objt_cs(si_b->end);
if (cs && !(cs->conn->flags & CO_FL_ERROR)) { if (cs && !(cs->conn->flags & CO_FL_ERROR)) {
ret |= si_cs_send(cs); ret |= si_cs_send(cs);
si_cs_recv(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) if (ret)