From: Willy Tarreau Date: Thu, 12 Jul 2018 08:57:15 +0000 (+0200) Subject: MEDIUM: channel: make channel_slow_realign() take a swap buffer X-Git-Tag: v1.9-dev1~156 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fd8d42f496ac31fd82c1ee631034c23b63e77ef9;p=thirdparty%2Fhaproxy.git MEDIUM: channel: make channel_slow_realign() take a swap buffer The few call places where it's used can use the trash as a swap buffer, which is made for this exact purpose. This way we can rely on the generic b_slow_realign() call. --- diff --git a/include/proto/channel.h b/include/proto/channel.h index c7135de010..4e5b90b300 100644 --- a/include/proto/channel.h +++ b/include/proto/channel.h @@ -707,9 +707,9 @@ static inline void channel_truncate(struct channel *chn) * it allows the largest inputs to be processed at once and ensures that once * the output data leaves, the whole buffer is available at once. */ -static inline void channel_slow_realign(struct channel *chn) +static inline void channel_slow_realign(struct channel *chn, char *swap) { - return buffer_slow_realign(chn->buf, co_data(chn)); + return b_slow_realign(chn->buf, swap, co_data(chn)); } /* diff --git a/src/hlua.c b/src/hlua.c index cdb5ff69c6..f8170062e9 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -3041,7 +3041,7 @@ __LJMP static int hlua_channel_send_yield(lua_State *L, int status, lua_KContext * detects a non contiguous buffer and realign it. */ if (bi_space_for_replace(chn->buf) < max) - channel_slow_realign(chn); + channel_slow_realign(chn, trash.str); /* Copy input data in the buffer. */ max = buffer_replace2(chn->buf, chn->buf->p, chn->buf->p, str + l, max); diff --git a/src/proto_http.c b/src/proto_http.c index a4db33a48e..67598e58a8 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -1652,7 +1652,7 @@ int http_wait_for_request(struct stream *s, struct channel *req, int an_bit) } if (unlikely(bi_end(req->buf) < b_ptr(req->buf, msg->next) || bi_end(req->buf) > req->buf->data + req->buf->size - global.tune.maxrewrite)) - channel_slow_realign(req); + channel_slow_realign(req, trash.str); } if (likely(msg->next < req->buf->i)) /* some unparsed data are available */ @@ -5139,7 +5139,7 @@ int http_wait_for_response(struct stream *s, struct channel *rep, int an_bit) if (unlikely(bi_end(rep->buf) < b_ptr(rep->buf, msg->next) || bi_end(rep->buf) > rep->buf->data + rep->buf->size - global.tune.maxrewrite)) - channel_slow_realign(rep); + channel_slow_realign(rep, trash.str); if (likely(msg->next < rep->buf->i)) http_msg_analyzer(msg, &txn->hdr_idx); @@ -9517,7 +9517,7 @@ int smp_prefetch_http(struct proxy *px, struct stream *s, unsigned int opt, */ if (s->req.buf->p > s->req.buf->data && s->req.buf->i + s->req.buf->p > s->req.buf->data + s->req.buf->size - global.tune.maxrewrite) - channel_slow_realign(&s->req); + channel_slow_realign(&s->req, trash.str); if (unlikely(txn->req.msg_state < HTTP_MSG_BODY)) { if (msg->msg_state == HTTP_MSG_ERROR)