From: Christopher Faulet Date: Mon, 16 Mar 2026 10:25:35 +0000 (+0100) Subject: MEDIUM: stconn: Use a small buffer if possible for L7 retries X-Git-Tag: v3.4-dev8~126 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c9a9fa813b9d1431d61c26aa4549ae3bb196ce5a;p=thirdparty%2Fhaproxy.git 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. --- 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)); + } } }