]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: channel/htx: Call channel_htx_recv_max() from channel_recv_max()
authorChristopher Faulet <cfaulet@haproxy.com>
Tue, 14 May 2019 20:14:03 +0000 (22:14 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 28 May 2019 05:42:12 +0000 (07:42 +0200)
When channel_recv_max() is called for an HTX stream, we fall back on the HTX
version. This function is called from si_cs_recv(). This will let us pass the
max amount of bytes to read to HTX multiplexers.

include/proto/channel.h

index b2cd5c37456f562373a839b1465e1e5ba11e6734..b53e177935d77f8e128ea6712fdbe8cb4134f6f3 100644 (file)
@@ -38,6 +38,7 @@
 #include <types/stream.h>
 #include <types/stream_interface.h>
 
+#include <proto/stream.h>
 #include <proto/task.h>
 
 /* perform minimal intializations, report 0 in case of error, 1 if OK. */
@@ -778,27 +779,30 @@ static inline int channel_htx_full(const struct channel *c, const struct htx *ht
 }
 
 
-/* Returns the amount of space available at the input of the buffer, taking the
- * reserved space into account if ->to_forward indicates that an end of transfer
- * is close to happen. The test is optimized to avoid as many operations as
- * possible for the fast case.
- */
-static inline int channel_recv_max(const struct channel *chn)
+/* HTX version of channel_recv_max(). */
+static inline int channel_htx_recv_max(const struct channel *chn, const struct htx *htx)
 {
        int ret;
 
-       ret = channel_recv_limit(chn) - b_data(&chn->buf);
+       ret = channel_htx_recv_limit(chn, htx) - htx_used_space(htx);
        if (ret < 0)
                ret = 0;
        return ret;
 }
 
-/* HTX version of channel_recv_max(). */
-static inline int channel_htx_recv_max(const struct channel *chn, const struct htx *htx)
+/* Returns the amount of space available at the input of the buffer, taking the
+ * reserved space into account if ->to_forward indicates that an end of transfer
+ * is close to happen. The test is optimized to avoid as many operations as
+ * possible for the fast case.
+ */
+static inline int channel_recv_max(const struct channel *chn)
 {
        int ret;
 
-       ret = channel_htx_recv_limit(chn, htx) - htx->data;
+       if (IS_HTX_STRM(chn_strm(chn)))
+               return channel_htx_recv_max(chn, htxbuf(&chn->buf));
+
+       ret = channel_recv_limit(chn) - b_data(&chn->buf);
        if (ret < 0)
                ret = 0;
        return ret;