From: Christopher Faulet Date: Fri, 14 Apr 2023 10:09:35 +0000 (+0200) Subject: MEDIUM: stconn: Rely on SC flags to handle errors instead of SE flags X-Git-Tag: v2.8-dev8~133 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=25d9fe50f5f3e9a3db2e42e251beef38d5d5d872;p=thirdparty%2Fhaproxy.git MEDIUM: stconn: Rely on SC flags to handle errors instead of SE flags It is the last commit on this subject. we stop to use SE_FL_ERROR flag from the SC, except at the I/O level. Otherwise, we rely on SC_FL_ERROR flag. Now, there should be a real separation between SE flags and SC flags. --- diff --git a/src/stconn.c b/src/stconn.c index f4d54a7c6e..8c72e3608d 100644 --- a/src/stconn.c +++ b/src/stconn.c @@ -579,7 +579,7 @@ static void sc_app_shut(struct stconn *sc) * However, if SC_FL_NOLINGER is explicitly set, we know there is * no risk so we close both sides immediately. */ - if (!(sc->flags & (SC_FL_ERROR|SC_FL_NOLINGER|SC_FL_ABRT_DONE)) && !sc_ep_test(sc, SE_FL_ERROR) && + if (!(sc->flags & (SC_FL_ERROR|SC_FL_NOLINGER|SC_FL_ABRT_DONE)) && !(ic->flags & CF_DONT_READ)) return; @@ -705,7 +705,7 @@ static void sc_app_shut_conn(struct stconn *sc) * no risk so we close both sides immediately. */ - if ((sc->flags & SC_FL_ERROR) || sc_ep_test(sc, SE_FL_ERROR)) { + if (sc->flags & SC_FL_ERROR) { /* quick close, the socket is already shut anyway */ } else if (sc->flags & SC_FL_NOLINGER) { @@ -903,7 +903,7 @@ static void sc_app_shut_applet(struct stconn *sc) * However, if SC_FL_NOLINGER is explicitly set, we know there is * no risk so we close both sides immediately. */ - if (!(sc->flags & (SC_FL_ERROR|SC_FL_NOLINGER|SC_FL_ABRT_DONE)) && !sc_ep_test(sc, SE_FL_ERROR) && + if (!(sc->flags & (SC_FL_ERROR|SC_FL_NOLINGER|SC_FL_ABRT_DONE)) && !(ic->flags & CF_DONT_READ)) return; @@ -1101,7 +1101,7 @@ static void sc_notify(struct stconn *sc) * read event while consumer side is not established (CF_READ_EVENT + sco->state != SC_ST_EST) */ ((ic->flags & CF_READ_EVENT) && ((sc->flags & SC_FL_EOI) || (sc->flags & SC_FL_ABRT_DONE) || !ic->to_forward || sco->state != SC_ST_EST)) || - (sc->flags & SC_FL_ERROR) || sc_ep_test(sc, SE_FL_ERROR) || + (sc->flags & SC_FL_ERROR) || /* changes on the consumption side */ sc_ep_test(sc, SE_FL_ERR_PENDING) ||