[MEDIUM] session: set SI_FL_NOLINGER when aborting on write timeouts

Doing this helps us flush the system buffers from all unread data. This
avoids having orphans when clients suddenly get off the net without
reading their entire response.
diff --git a/src/session.c b/src/session.c
index 2261c93..a22a6f3 100644
--- a/src/session.c
+++ b/src/session.c
@@ -668,19 +668,23 @@
 
 		buffer_check_timeouts(s->req);
 
+		if (unlikely((s->req->flags & (BF_SHUTW|BF_WRITE_TIMEOUT)) == BF_WRITE_TIMEOUT)) {
+			s->req->cons->flags |= SI_FL_NOLINGER;
+			s->req->cons->shutw(s->req->cons);
+		}
+
 		if (unlikely((s->req->flags & (BF_SHUTR|BF_READ_TIMEOUT)) == BF_READ_TIMEOUT))
 			s->req->prod->shutr(s->req->prod);
 
-		if (unlikely((s->req->flags & (BF_SHUTW|BF_WRITE_TIMEOUT)) == BF_WRITE_TIMEOUT))
-			s->req->cons->shutw(s->req->cons);
-
 		buffer_check_timeouts(s->rep);
 
+		if (unlikely((s->rep->flags & (BF_SHUTW|BF_WRITE_TIMEOUT)) == BF_WRITE_TIMEOUT)) {
+			s->rep->cons->flags |= SI_FL_NOLINGER;
+			s->rep->cons->shutw(s->rep->cons);
+		}
+
 		if (unlikely((s->rep->flags & (BF_SHUTR|BF_READ_TIMEOUT)) == BF_READ_TIMEOUT))
 			s->rep->prod->shutr(s->rep->prod);
-
-		if (unlikely((s->rep->flags & (BF_SHUTW|BF_WRITE_TIMEOUT)) == BF_WRITE_TIMEOUT))
-			s->rep->cons->shutw(s->rep->cons);
 	}
 
 	/* 1b: check for low-level errors reported at the stream interface.