]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: h2: Don't check send_wait to know if we're in the send_list.
authorOlivier Houchard <ohouchard@haproxy.com>
Fri, 10 May 2019 12:02:21 +0000 (14:02 +0200)
committerOlivier Houchard <cognet@ci0.org>
Fri, 10 May 2019 13:06:54 +0000 (15:06 +0200)
When we have to stop sending due to the stream flow control, don't check
if send_wait is NULL to know if we're in the send_list, because at this
point it'll always be NULL, while we're probably in the list.
Use LIST_ISEMPTY(&h2s->list) instead.
Failing to do so mean we might be added in the send_list when flow control
allows us to emit again, while we're already in it.
While I'm here, replace LIST_DEL + LIST_INIT by LIST_DEL_INIT.

This should be backported to 1.9.

src/mux_h2.c

index 6a8a762a25455f6ef0f6f97dbcdf42294657c120..d1fa25a5d76998c4f262f2abbdfc74d0b118e79a 100644 (file)
@@ -4160,10 +4160,8 @@ static size_t h2s_frt_make_resp_data(struct h2s *h2s, const struct buffer *buf,
 
        if (size <= 0) {
                h2s->flags |= H2_SF_BLK_SFCTL;
-               if (h2s->send_wait) {
-                       LIST_DEL(&h2s->list);
-                       LIST_INIT(&h2s->list);
-               }
+               if (!LIST_ISEMPTY(&h2s->list))
+                       LIST_DEL_INIT(&h2s->list);
                goto end;
        }
 
@@ -4907,10 +4905,8 @@ static size_t h2s_htx_frt_make_resp_data(struct h2s *h2s, struct buffer *buf, si
 
        if (h2s->mws <= 0) {
                h2s->flags |= H2_SF_BLK_SFCTL;
-               if (h2s->send_wait) {
-                       LIST_DEL(&h2s->list);
-                       LIST_INIT(&h2s->list);
-               }
+               if (!LIST_ISEMPTY(&h2s->list))
+                       LIST_DEL_INIT(&h2s->list);
                goto end;
        }