OPTIM: http: do not re-enable reading on client side while closing the server side
authorWilly Tarreau <w@1wt.eu>
Sun, 15 Dec 2013 14:32:10 +0000 (15:32 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 16 Dec 2013 01:23:53 +0000 (02:23 +0100)
It's common to observe a an recv() call on the client side just after
the connect() to has been issued to the server side when running in
server close mode. The reason is that the whole request has been sent
and the shutw() has been queued in the channel, so the request message
switches to the MSG_CLOSED state, which didn't disable reading. Let's
do it now. That way the reading will only be re-enabled after the
response is transferred to the client. However if abortonclose is set,
we still leave it enabled.

src/proto_http.c

index 2fcff71..a459c53 100644 (file)
@@ -4496,6 +4496,8 @@ int http_sync_req_state(struct session *s)
 
        if (txn->req.msg_state == HTTP_MSG_CLOSED) {
        http_msg_closed:
+               if (!(s->be->options & PR_O_ABRT_CLOSE))
+                       channel_dont_read(chn);
                goto wait_other_side;
        }