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.
This commit is contained in:
Willy Tarreau 2018-07-12 10:57:15 +02:00
parent 4cf1300e6a
commit fd8d42f496
3 changed files with 6 additions and 6 deletions

View File

@ -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 * 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. * 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));
} }
/* /*

View File

@ -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. * detects a non contiguous buffer and realign it.
*/ */
if (bi_space_for_replace(chn->buf) < max) if (bi_space_for_replace(chn->buf) < max)
channel_slow_realign(chn); channel_slow_realign(chn, trash.str);
/* Copy input data in the buffer. */ /* Copy input data in the buffer. */
max = buffer_replace2(chn->buf, chn->buf->p, chn->buf->p, str + l, max); max = buffer_replace2(chn->buf, chn->buf->p, chn->buf->p, str + l, max);

View File

@ -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) || 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)) 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 */ 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) || 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)) 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)) if (likely(msg->next < rep->buf->i))
http_msg_analyzer(msg, &txn->hdr_idx); 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 && 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) 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 (unlikely(txn->req.msg_state < HTTP_MSG_BODY)) {
if (msg->msg_state == HTTP_MSG_ERROR) if (msg->msg_state == HTTP_MSG_ERROR)