From: Willy Tarreau Date: Fri, 20 Oct 2017 16:21:49 +0000 (+0200) Subject: MINOR: buffer: make bo_getblk_nc() not return 2 for a full buffer X-Git-Tag: v1.8-dev3~23 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0621da5f5bbd089e3562a412d7e73cf8971030b0;p=thirdparty%2Fhaproxy.git MINOR: buffer: make bo_getblk_nc() not return 2 for a full buffer Thus function returns the number of blocks. When a buffer is full and properly aligned, buf->p loops back the beginning, and the test in the code doesn't cover that specific case, so it returns two chunks, a full one and an empty one. It's harmless but can sometimes have a small impact on performance and definitely makes the code hard to debug. --- diff --git a/include/common/buffer.h b/include/common/buffer.h index 5ebf18cb35..9006c00953 100644 --- a/include/common/buffer.h +++ b/include/common/buffer.h @@ -532,7 +532,7 @@ static inline int bo_getblk_nc(struct buffer *buf, char **blk1, int *len1, char if (unlikely(buf->o == 0)) return 0; - if (unlikely(buf->p - buf->o < buf->data)) { + if (unlikely(buf->p != buf->data && buf->p - buf->o < buf->data)) { *blk1 = buf->p - buf->o + buf->size; *len1 = buf->data + buf->size - *blk1; *blk2 = buf->data;