From: Willy Tarreau Date: Wed, 14 Jan 2015 14:56:50 +0000 (+0100) Subject: MEDIUM: channel: make bi_avail() use channel_in_transit() X-Git-Tag: v1.6-dev1~195 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=27bb0e14a8ae17d4bdf4ca8bd73e1ceb79ca4a14;p=thirdparty%2Fhaproxy.git MEDIUM: channel: make bi_avail() use channel_in_transit() This ensures that we rely on a sane computation for the buffer size. --- diff --git a/include/proto/channel.h b/include/proto/channel.h index dccb987218..89bef1da78 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; - - rem -= chn->buf->o; - rem -= chn->buf->i; - if (!rem) - return rem; /* buffer already full */ + int ret; - 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