From 27bb0e14a8ae17d4bdf4ca8bd73e1ceb79ca4a14 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 14 Jan 2015 15:56:50 +0100 Subject: [PATCH] MEDIUM: channel: make bi_avail() use channel_in_transit() This ensures that we rely on a sane computation for the buffer size. --- include/proto/channel.h | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/include/proto/channel.h b/include/proto/channel.h index dccb98721..89bef1da7 100644 --- a/include/proto/channel.h +++ b/include/proto/channel.h @@ -311,28 +311,12 @@ static inline int buffer_max_len(const struct channel *chn) */ static inline int bi_avail(const struct channel *chn) { - int rem = chn->buf->size; - int rem2; + int ret; - rem -= chn->buf->o; - rem -= chn->buf->i; - if (!rem) - return rem; /* buffer already full */ - - if (chn->to_forward >= chn->buf->i || - (CHN_INFINITE_FORWARD < MAX_RANGE(typeof(chn->buf->i)) && // just there to ensure gcc - chn->to_forward == CHN_INFINITE_FORWARD)) // avoids the useless second - return rem; // test whenever possible - - rem2 = rem - global.tune.maxrewrite; - rem2 += chn->buf->o; - rem2 += chn->to_forward; - - if (rem > rem2) - rem = rem2; - if (rem > 0) - return rem; - return 0; + ret = buffer_max_len(chn) - chn->buf->i - chn->buf->o; + if (ret < 0) + ret = 0; + return ret; } /* Cut the "tail" of the channel's buffer, which means strip it to the length