From: Christopher Faulet Date: Tue, 10 Mar 2026 15:27:03 +0000 (+0100) Subject: MEDIUM: stream: Try to use small buffer when TCP stream is queued X-Git-Tag: v3.4-dev8~127 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=181cd8ba8a5354493ba7d84f1642ad8fe339cbec;p=thirdparty%2Fhaproxy.git MEDIUM: stream: Try to use small buffer when TCP stream is queued It was performed when an HTX stream was queued. Small requests were moved in small buffers. Here we do the same but for TCP streams. --- diff --git a/src/stream.c b/src/stream.c index 28989bd2f..8886763bf 100644 --- a/src/stream.c +++ b/src/stream.c @@ -2512,11 +2512,22 @@ struct task *process_stream(struct task *t, void *context, unsigned int state) if (scb->state == SC_ST_ASS && srv && srv->rdr_len && (s->flags & SF_REDIRECTABLE)) http_perform_server_redirect(s, scb); - if (unlikely(scb->state == SC_ST_QUE && IS_HTX_STRM(s))) { + if (unlikely(scb->state == SC_ST_QUE)) { struct buffer sbuf = BUF_NULL; - if (!htx_move_to_small_buffer(&sbuf, &req->buf)) - break; + if (IS_HTX_STRM(s)) { + if (!htx_move_to_small_buffer(&sbuf, &req->buf)) + break; + } + else { + if (b_size(&req->buf) == global.tune.bufsize_small || + b_data(&req->buf) > global.tune.bufsize_small) + break; + if (!b_alloc_small(&sbuf)) + break; + b_xfer(&sbuf, &req->buf, b_data(&req->buf)); + } + b_free(&req->buf); offer_buffers(s, 1); req->buf = sbuf;