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.
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 @@
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