]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: session: disable lingering on the server when the client aborts
authorWilly Tarreau <w@1wt.eu>
Fri, 21 Jun 2013 06:20:19 +0000 (08:20 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 21 Jun 2013 06:20:19 +0000 (08:20 +0200)
When abortonclose is used and an error is detected on the client side,
better force an RST to the server. That way we propagate to the server
the same vision we got from the client, and we ensure that we won't keep
TIME_WAITs.

src/session.c

index d967b2bbf752e903f282d909eadd69e64ed08107..004f293c0013eba8282f7813aaee1ca1ea6ab20c 100644 (file)
@@ -2139,8 +2139,11 @@ struct task *process_session(struct task *t)
 
        /* shutdown(write) pending */
        if (unlikely((s->req->flags & (CF_SHUTW|CF_SHUTW_NOW)) == CF_SHUTW_NOW &&
-                    channel_is_empty(s->req)))
+                    channel_is_empty(s->req))) {
+               if (s->req->flags & CF_READ_ERROR)
+                       s->req->cons->flags |= SI_FL_NOLINGER;
                si_shutw(s->req->cons);
+       }
 
        /* shutdown(write) done on server side, we must stop the client too */
        if (unlikely((s->req->flags & (CF_SHUTW|CF_SHUTR|CF_SHUTR_NOW)) == CF_SHUTW &&