diff --git a/src/stconn.c b/src/stconn.c index ca067d6d0..94ea9758a 100644 --- a/src/stconn.c +++ b/src/stconn.c @@ -1546,8 +1546,11 @@ int sc_conn_recv(struct stconn *sc) se_have_no_more_data(sc->sedesc); } else if (sc->flags & SC_FL_EOI) { - /* No more data are expected at this stage */ - se_have_no_more_data(sc->sedesc); + /* No more data are expected at this stage, except if abortonclose is enabled */ + if (!(flags & CO_RFL_KEEP_RECV)) + se_have_no_more_data(sc->sedesc); + else + se_have_more_data(sc->sedesc); } else { /* The mux may have more data to deliver. Be sure to be able to diff --git a/src/stream.c b/src/stream.c index f0cb8cf80..9ad26b4ce 100644 --- a/src/stream.c +++ b/src/stream.c @@ -2316,6 +2316,7 @@ struct task *process_stream(struct task *t, void *context, unsigned int state) if (s->be->options & PR_O_ABRT_CLOSE) { struct connection *conn = sc_conn(scf); + se_have_more_data(scf->sedesc); if (conn && conn->mux && conn->mux->ctl) conn->mux->ctl(conn, MUX_CTL_SUBS_RECV, NULL); }