]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: channel: make bi_avail() use channel_in_transit()
authorWilly Tarreau <w@1wt.eu>
Wed, 14 Jan 2015 14:56:50 +0000 (15:56 +0100)
committerWilly Tarreau <w@1wt.eu>
Wed, 14 Jan 2015 14:57:24 +0000 (15:57 +0100)
This ensures that we rely on a sane computation for the buffer size.

include/proto/channel.h

index dccb987218bfd08c657324014a1994505985c5c1..89bef1da781665b973926e25b37e94b7a3a20cb9 100644 (file)
@@ -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