From 57ec32fb993d4b426ccca7ed2322eacbf9218596 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 11 Apr 2017 19:59:33 +0200 Subject: [PATCH] MINOR: connection: send data before receiving It's more efficient this way, as it allows to flush a send buffer before receiving data in the other one. This can lead to a slightly faster buffer recycling, thus slightly less memory and a small performance increase by using a hotter cache. --- src/connection.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/connection.c b/src/connection.c index f054cd13b..0c90c3b43 100644 --- a/src/connection.c +++ b/src/connection.c @@ -94,6 +94,16 @@ void conn_fd_handler(int fd) if ((conn->flags & CO_FL_INIT_DATA) && conn->data->init(conn) < 0) return; + if (conn->xprt && fd_send_ready(fd) && + ((conn->flags & (CO_FL_DATA_WR_ENA|CO_FL_ERROR|CO_FL_HANDSHAKE)) == CO_FL_DATA_WR_ENA)) { + /* force reporting of activity by clearing the previous flags : + * we'll have at least ERROR or CONNECTED at the end of an I/O, + * both of which will be detected below. + */ + flags = 0; + conn->data->send(conn); + } + /* The data transfer starts here and stops on error and handshakes. Note * that we must absolutely test conn->xprt at each step in case it suddenly * changes due to a quick unexpected close(). @@ -108,16 +118,6 @@ void conn_fd_handler(int fd) conn->data->recv(conn); } - if (conn->xprt && fd_send_ready(fd) && - ((conn->flags & (CO_FL_DATA_WR_ENA|CO_FL_ERROR|CO_FL_HANDSHAKE)) == CO_FL_DATA_WR_ENA)) { - /* force reporting of activity by clearing the previous flags : - * we'll have at least ERROR or CONNECTED at the end of an I/O, - * both of which will be detected below. - */ - flags = 0; - conn->data->send(conn); - } - /* It may happen during the data phase that a handshake is * enabled again (eg: SSL) */