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 f054cd1..0c90c3b 100644 --- a/src/connection.c +++ b/src/connection.c @@ -94,28 +94,28 @@ void conn_fd_handler(int fd) if ((conn->flags & CO_FL_INIT_DATA) && conn->data->init(conn) < 0) return; - /* 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(). - */ - if (conn->xprt && fd_recv_ready(fd) && - ((conn->flags & (CO_FL_DATA_RD_ENA|CO_FL_WAIT_ROOM|CO_FL_ERROR|CO_FL_HANDSHAKE)) == CO_FL_DATA_RD_ENA)) { + 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->recv(conn); + conn->data->send(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)) { + /* 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(). + */ + if (conn->xprt && fd_recv_ready(fd) && + ((conn->flags & (CO_FL_DATA_RD_ENA|CO_FL_WAIT_ROOM|CO_FL_ERROR|CO_FL_HANDSHAKE)) == CO_FL_DATA_RD_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); + conn->data->recv(conn); } /* It may happen during the data phase that a handshake is -- 1.7.10.4