diff --git a/include/proto/channel.h b/include/proto/channel.h index db179cad4..42bba15b0 100644 --- a/include/proto/channel.h +++ b/include/proto/channel.h @@ -334,12 +334,11 @@ static inline int channel_recv_max(const struct channel *chn) return ret; } -/* Cut the "tail" of the channel's buffer, which means strip it to the length - * of unsent data only, and kill any remaining unsent data. Any scheduled - * forwarding is stopped. This is mainly to be used to send error messages - * after existing data. +/* Truncate any unread data in the channel's buffer, and disable forwarding. + * Outgoing data are left intact. This is mainly to be used to send error + * messages after existing data. */ -static inline void bi_erase(struct channel *chn) +static inline void channel_truncate(struct channel *chn) { if (!chn->buf->o) return channel_erase(chn); diff --git a/src/proto_http.c b/src/proto_http.c index e14b1d69c..6d94b69be 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -5233,7 +5233,7 @@ int http_sync_res_state(struct session *s) if (txn->rsp.msg_state == HTTP_MSG_CLOSED) { http_msg_closed: /* drop any pending data */ - bi_erase(chn); + channel_truncate(chn); channel_auto_close(chn); channel_auto_read(chn); goto wait_other_side; @@ -5300,7 +5300,7 @@ int http_resync_states(struct session *s) channel_abort(s->req); channel_auto_close(s->req); channel_auto_read(s->req); - bi_erase(s->req); + channel_truncate(s->req); } else if ((txn->req.msg_state == HTTP_MSG_DONE || txn->req.msg_state == HTTP_MSG_CLOSED) && @@ -5745,7 +5745,7 @@ int http_wait_for_response(struct session *s, struct channel *rep, int an_bit) rep->analysers = 0; txn->status = 502; rep->prod->flags |= SI_FL_NOLINGER; - bi_erase(rep); + channel_truncate(rep); stream_int_retnclose(rep->cons, http_error_message(s, HTTP_ERR_502)); if (!(s->flags & SN_ERR_MASK)) @@ -5780,7 +5780,7 @@ int http_wait_for_response(struct session *s, struct channel *rep, int an_bit) rep->analysers = 0; txn->status = 502; rep->prod->flags |= SI_FL_NOLINGER; - bi_erase(rep); + channel_truncate(rep); stream_int_retnclose(rep->cons, http_error_message(s, HTTP_ERR_502)); if (!(s->flags & SN_ERR_MASK)) @@ -5807,7 +5807,7 @@ int http_wait_for_response(struct session *s, struct channel *rep, int an_bit) rep->analysers = 0; txn->status = 504; rep->prod->flags |= SI_FL_NOLINGER; - bi_erase(rep); + channel_truncate(rep); stream_int_retnclose(rep->cons, http_error_message(s, HTTP_ERR_504)); if (!(s->flags & SN_ERR_MASK)) @@ -5828,7 +5828,7 @@ int http_wait_for_response(struct session *s, struct channel *rep, int an_bit) channel_auto_close(rep); txn->status = 400; - bi_erase(rep); + channel_truncate(rep); stream_int_retnclose(rep->cons, http_error_message(s, HTTP_ERR_400)); if (!(s->flags & SN_ERR_MASK)) @@ -5857,7 +5857,7 @@ int http_wait_for_response(struct session *s, struct channel *rep, int an_bit) rep->analysers = 0; txn->status = 502; rep->prod->flags |= SI_FL_NOLINGER; - bi_erase(rep); + channel_truncate(rep); stream_int_retnclose(rep->cons, http_error_message(s, HTTP_ERR_502)); if (!(s->flags & SN_ERR_MASK)) @@ -6189,7 +6189,7 @@ skip_content_length: s->logs.logwait = 0; s->logs.level = 0; s->rep->flags &= ~CF_EXPECT_MORE; /* speed up sending a previous response */ - bi_erase(rep); + channel_truncate(rep); stream_int_retnclose(rep->cons, NULL); return 0; } @@ -6260,7 +6260,7 @@ int http_process_res_common(struct session *s, struct channel *rep, int an_bit, txn->status = 502; s->logs.t_data = -1; /* was not a valid response */ rep->prod->flags |= SI_FL_NOLINGER; - bi_erase(rep); + channel_truncate(rep); stream_int_retnclose(rep->cons, http_error_message(s, HTTP_ERR_502)); if (!(s->flags & SN_ERR_MASK)) s->flags |= SN_ERR_PRXCOND; diff --git a/src/stream_interface.c b/src/stream_interface.c index f05f4a8f2..9025851d9 100644 --- a/src/stream_interface.c +++ b/src/stream_interface.c @@ -125,8 +125,8 @@ void stream_int_retnclose(struct stream_interface *si, const struct chunk *msg) channel_abort(si->ib); channel_auto_close(si->ib); channel_erase(si->ib); + channel_truncate(si->ob); - bi_erase(si->ob); if (likely(msg && msg->len)) bo_inject(si->ob, msg->str, msg->len);