From b57af617c06347af2284ac7949a7ddd7e52b4e41 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 23 Jan 2019 20:43:53 +0100 Subject: [PATCH] BUG/MINOR: mux-h1: avoid copying output over itself in zero-copy 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 --- src/mux_h1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mux_h1.c b/src/mux_h1.c index a5d60c3c4..d928cef9b 100644 --- a/src/mux_h1.c +++ b/src/mux_h1.c @@ -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);