]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[BUG] buffer_forward() would not correctly consider data already scheduled
authorWilly Tarreau <w@1wt.eu>
Tue, 15 Sep 2009 18:32:30 +0000 (20:32 +0200)
committerWilly Tarreau <w@1wt.eu>
Sat, 3 Oct 2009 17:16:22 +0000 (19:16 +0200)
The computations in buffer_forward() were only valid if buffer_forward()
was used on a buffer which had no more data scheduled for forwarding.
This is always the case right now so this bug is not yet triggered but
it will soon be. Now we correctly discount the bytes to be forwarded
from the data already present in the buffer.
(cherry picked from commit 91aa577b1f0483c50bfa72b3198cf1a1ff835163)

include/proto/buffers.h

index dc9961a2bd97d4ab6f91bbb40c2f887aca82d93a..95e1ab374c5dc917defe87498f76eb943ef07d51 100644 (file)
@@ -99,12 +99,13 @@ static inline void buffer_forward(struct buffer *buf, unsigned int bytes)
 {
        unsigned int data_left;
 
-       buf->to_forward += bytes;
        data_left = buf->l - buf->send_max;
-       if (data_left > buf->to_forward)
-               data_left = buf->to_forward;
+       if (data_left >= bytes) {
+               buf->send_max += bytes;
+               return;
+       }
 
-       buf->to_forward -= data_left;
+       buf->to_forward += bytes - data_left;
        buf->send_max += data_left;
 }