mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 14:21:25 +02:00
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.
This commit is contained in:
parent
d62b98c6e8
commit
57ec32fb99
@ -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)
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user