]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: streams: Only re-run process_stream if we're in a connected state.
authorOlivier Houchard <ohouchard@haproxy.com>
Wed, 10 Apr 2019 11:51:37 +0000 (13:51 +0200)
committerOlivier Houchard <cognet@ci0.org>
Fri, 12 Apr 2019 11:14:48 +0000 (13:14 +0200)
In process_stream(), only try again when there's the SI_FL_ERR flag and we're
in a connected state, otherwise we can loop forever.
It used to work because si_update_both() bogusly removed the SI_FL_ERR flag,
and it would never be set at this point. Now it does, so take that into
account.
Many, many thanks to Maciej Zdeb for reporting the problem, and helping
investigating it.

This should be backported to 1.9.

src/stream.c

index cac9a3664081af9f3ca90ad89d1ffc6cfe9f5c59..764c5f32ecec4bc6d1d9cdab7671bca0f8242c93 100644 (file)
@@ -2502,7 +2502,8 @@ redo:
 
                if (si_f->state == SI_ST_DIS || si_f->state != si_f_prev_state ||
                    si_b->state == SI_ST_DIS || si_b->state != si_b_prev_state ||
-                   ((si_f->flags | si_b->flags) & SI_FL_ERR) ||
+                   ((si_f->flags & SI_FL_ERR) && si_f->state != SI_ST_CLO) ||
+                   ((si_b->flags & SI_FL_ERR) && si_b->state != SI_ST_CLO) ||
                    (((req->flags ^ rqf_last) | (res->flags ^ rpf_last)) & CF_MASK_ANALYSER))
                        goto redo;