From: Willy Tarreau Date: Tue, 10 May 2022 06:46:07 +0000 (+0200) Subject: MINOR: conn_stream: make cs_set_error() work on the endpoint instead X-Git-Tag: v2.6-dev10~30 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=386346f5eb34ae251111f4e8be3cda06d4626b57;p=thirdparty%2Fhaproxy.git MINOR: conn_stream: make cs_set_error() work on the endpoint instead Wherever we need to report an error, we have an even easier access to the endpoint than the conn_stream. Let's first adjust the API to use the endpoint and rename the function accordingly to cs_ep_set_error(). --- diff --git a/include/haproxy/conn_stream.h b/include/haproxy/conn_stream.h index 2d5cc4ffa4..ae2d9f0b94 100644 --- a/include/haproxy/conn_stream.h +++ b/include/haproxy/conn_stream.h @@ -205,13 +205,13 @@ static inline void cs_conn_drain_and_shut(struct conn_stream *cs) cs_conn_shutr(cs, CO_SHR_DRAIN); } -/* sets CS_EP_ERROR or CS_EP_ERR_PENDING on the cs */ -static inline void cs_set_error(struct conn_stream *cs) +/* sets CS_EP_ERROR or CS_EP_ERR_PENDING on the endpoint */ +static inline void cs_ep_set_error(struct cs_endpoint *endp) { - if (cs->endp->flags & CS_EP_EOS) - cs->endp->flags |= CS_EP_ERROR; + if (endp->flags & CS_EP_EOS) + endp->flags |= CS_EP_ERROR; else - cs->endp->flags |= CS_EP_ERR_PENDING; + endp->flags |= CS_EP_ERR_PENDING; } /* Retrieves any valid conn_stream from this connection, preferably the first diff --git a/src/mux_fcgi.c b/src/mux_fcgi.c index 087e42b2f3..ce392c9627 100644 --- a/src/mux_fcgi.c +++ b/src/mux_fcgi.c @@ -917,7 +917,7 @@ static inline void fcgi_strm_error(struct fcgi_strm *fstrm) TRACE_STATE("switching to ERROR", FCGI_EV_FSTRM_ERR, fstrm->fconn->conn, fstrm); } if (fstrm->cs) - cs_set_error(fstrm->cs); + cs_ep_set_error(fstrm->cs->endp); } } @@ -4113,7 +4113,7 @@ static size_t fcgi_snd_buf(struct conn_stream *cs, struct buffer *buf, size_t co if (fstrm->state == FCGI_SS_ERROR) { TRACE_DEVEL("reporting error to the app-layer stream", FCGI_EV_STRM_SEND|FCGI_EV_FSTRM_ERR|FCGI_EV_STRM_ERR, fconn->conn, fstrm); - cs_set_error(cs); + cs_ep_set_error(cs->endp); if (!(fstrm->flags & FCGI_SF_BEGIN_SENT) || fcgi_strm_send_abort(fconn, fstrm)) fcgi_strm_close(fstrm); } diff --git a/src/mux_h2.c b/src/mux_h2.c index b13ac8a97e..5e56177596 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -1274,7 +1274,7 @@ static inline __maybe_unused void h2s_error(struct h2s *h2s, enum h2_err err) if (h2s->st < H2_SS_ERROR) h2s->st = H2_SS_ERROR; if (h2s->cs) - cs_set_error(h2s->cs); + cs_ep_set_error(h2s->endp); } } @@ -2749,7 +2749,7 @@ static int h2c_handle_rst_stream(struct h2c *h2c, struct h2s *h2s) h2s_close(h2s); if (h2s->cs) { - cs_set_error(h2s->cs); + cs_ep_set_error(h2s->endp); h2s_alert(h2s); } @@ -6662,7 +6662,7 @@ static size_t h2_snd_buf(struct conn_stream *cs, struct buffer *buf, size_t coun /* RST are sent similarly to frame acks */ if (h2s->st == H2_SS_ERROR || h2s->flags & H2_SF_RST_RCVD) { TRACE_DEVEL("reporting RST/error to the app-layer stream", H2_EV_H2S_SEND|H2_EV_H2S_ERR|H2_EV_STRM_ERR, h2s->h2c->conn, h2s); - cs_set_error(cs); + cs_ep_set_error(cs->endp); if (h2s_send_rst_stream(h2s->h2c, h2s) > 0) h2s_close(h2s); }