]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: mux-h1: avoid copying output over itself in zero-copy
authorWilly Tarreau <w@1wt.eu>
Wed, 23 Jan 2019 19:43:53 +0000 (20:43 +0100)
committerWilly Tarreau <w@1wt.eu>
Wed, 23 Jan 2019 19:43:53 +0000 (20:43 +0100)
It's almost funny but one side effect of the latest zero-copy changes made
to mux-h1 resulted in the temporary buffer being copied over itself at the
exact same location. This has no impact except slowing down operations and
irritating valgrind. The cause is an incorrect pointer check after the
alignment optimizations were made.

This needs to be backported to 1.9.

Reported-by: Tim Duesterhus <tim@bastelstu.be>
src/mux_h1.c

index a5d60c3c4e3c339cb7c13c62ab27900bf9bb9ecd..d928cef9b4ec4330ce8ad3601ef85a71535b8c28 100644 (file)
@@ -1658,7 +1658,7 @@ static size_t h1_process_output(struct h1c *h1c, struct buffer *buf, size_t coun
        /* when the output buffer is empty, tmp shares the same area so that we
         * only have to update pointers and lengths.
         */
-       if (tmp->area == h1c->obuf.area)
+       if (tmp->area == h1c->obuf.area + h1c->obuf.head)
                h1c->obuf.data = tmp->data;
        else
                b_putblk(&h1c->obuf, tmp->area, tmp->data);