From c9a9fa813b9d1431d61c26aa4549ae3bb196ce5a Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Mon, 16 Mar 2026 11:25:35 +0100 Subject: [PATCH] MEDIUM: stconn: Use a small buffer if possible for L7 retries Whe L7 retries are enabled and the request is small enough, a small buffer is used instead of a regular one. --- src/stconn.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/stconn.c b/src/stconn.c index 1aa136aff..84ceb0841 100644 --- a/src/stconn.c +++ b/src/stconn.c @@ -1496,16 +1496,20 @@ int sc_conn_send(struct stconn *sc) if (s->txn->req.msg_state != HTTP_MSG_DONE || b_is_large(&oc->buf)) s->txn->flags &= ~TX_L7_RETRY; else { - if (b_alloc(&s->txn->l7_buffer, DB_UNLIKELY) == NULL) - s->txn->flags &= ~TX_L7_RETRY; - else { - memcpy(b_orig(&s->txn->l7_buffer), - b_orig(&oc->buf), - b_size(&oc->buf)); - s->txn->l7_buffer.head = co_data(oc); - b_add(&s->txn->l7_buffer, co_data(oc)); + if (!htx_copy_to_small_buffer(&s->txn->l7_buffer, &oc->buf)) { + if (b_alloc(&s->txn->l7_buffer, DB_UNLIKELY) == NULL) + s->txn->flags &= ~TX_L7_RETRY; + else { + memcpy(b_orig(&s->txn->l7_buffer), + b_orig(&oc->buf), + b_size(&oc->buf)); + } } + if (s->txn->flags & TX_L7_RETRY) { + s->txn->l7_buffer.head = co_data(oc); + b_set_data(&s->txn->l7_buffer, co_data(oc)); + } } } -- 2.47.3