mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-18 19:50:54 +00:00
OPTIM: checks: don't poll on recv when using plain TCP connects
When pure TCP checks are used, we see a useless call to recvfrom() in strace resulting from an inconditional poll on recv after the connect() succeeds. Let's remove this one and properly report connection success in the write events.
This commit is contained in:
parent
25e2ab53db
commit
06559ac1fb
15
src/checks.c
15
src/checks.c
@ -927,7 +927,12 @@ static void event_srv_chk_w(struct connection *conn)
|
||||
goto out_wakeup;
|
||||
}
|
||||
|
||||
/* here, we know that the connection is established */
|
||||
/* here, we know that the connection is established. That's enough for
|
||||
* a pure TCP check.
|
||||
*/
|
||||
if (!check->type)
|
||||
goto out_wakeup;
|
||||
|
||||
if (check->bo->o) {
|
||||
conn->xprt->snd_buf(conn, check->bo, MSG_DONTWAIT | MSG_NOSIGNAL);
|
||||
if (conn->flags & CO_FL_ERROR) {
|
||||
@ -1336,8 +1341,7 @@ static void event_srv_chk_r(struct connection *conn)
|
||||
break;
|
||||
|
||||
default:
|
||||
/* other checks are valid if the connection succeeded anyway */
|
||||
set_server_check_status(check, HCHK_STATUS_L4OK, NULL);
|
||||
/* for other checks (eg: pure TCP), delegate to the main task */
|
||||
break;
|
||||
} /* switch */
|
||||
|
||||
@ -1554,7 +1558,10 @@ static struct task *process_chk(struct task *t)
|
||||
int t_con = tick_add(now_ms, s->proxy->timeout.connect);
|
||||
t->expire = tick_first(t->expire, t_con);
|
||||
}
|
||||
conn_data_poll_recv(conn); /* prepare for reading a possible reply */
|
||||
|
||||
if (check->type)
|
||||
conn_data_want_recv(conn); /* prepare for reading a possible reply */
|
||||
|
||||
goto reschedule;
|
||||
|
||||
case SN_ERR_SRVTO: /* ETIMEDOUT */
|
||||
|
Loading…
Reference in New Issue
Block a user