diff --git a/include/proto/buffers.h b/include/proto/buffers.h index f174b8770..870dadb61 100644 --- a/include/proto/buffers.h +++ b/include/proto/buffers.h @@ -204,6 +204,7 @@ static inline void buffer_shutw_now(struct buffer *buf) static inline void buffer_abort(struct buffer *buf) { buf->flags |= BF_SHUTR_NOW | BF_SHUTW_NOW; + buf->flags &= ~BF_AUTO_CONNECT; } /* Installs as a hijacker on the buffer for session . The hijack diff --git a/src/session.c b/src/session.c index aa7945786..34ffb1170 100644 --- a/src/session.c +++ b/src/session.c @@ -1331,12 +1331,10 @@ struct task *process_session(struct task *t) /* first, let's check if the request buffer needs to shutdown(write), which may * happen either because the input is closed or because we want to force a close - * once the server has begun to respond. Note that we only apply it once we're - * connected, so that we still support queuing of a request with input already - * closed. + * once the server has begun to respond. */ if (unlikely((s->req->flags & (BF_SHUTW|BF_SHUTW_NOW|BF_HIJACK|BF_AUTO_CLOSE|BF_SHUTR)) == - (BF_AUTO_CLOSE|BF_SHUTR) && s->req->cons->state >= SI_ST_EST)) + (BF_AUTO_CLOSE|BF_SHUTR))) buffer_shutw_now(s->req); /* shutdown(write) pending */ @@ -1358,7 +1356,7 @@ struct task *process_session(struct task *t) * - the BF_AUTO_CONNECT flag is set (active connection) */ if (s->req->cons->state == SI_ST_INI) { - if (!(s->req->flags & (BF_SHUTW|BF_SHUTW_NOW))) { + if (!(s->req->flags & BF_SHUTW)) { if ((s->req->flags & (BF_AUTO_CONNECT|BF_OUT_EMPTY)) != BF_OUT_EMPTY) { /* If we have a ->connect method, we need to perform a connection request, * otherwise we immediately switch to the connected state.