mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-23 11:51:00 +01:00
BUG/MAJOR: checks: close FD on all timeouts
Since last commit, some timeouts were converted into an error to report the status, and as a result, the socket was not closed because it was supposed to have been done during the wake() call. Close the socket as soon as the timeout is detected to fix the issue. Also we now ensure to first initialize the connection flags.
This commit is contained in:
parent
74fa7fbec9
commit
b63b59641e
15
src/checks.c
15
src/checks.c
@ -1295,6 +1295,7 @@ static struct task *process_chk(struct task *t)
|
||||
}
|
||||
|
||||
/* prepare a new connection */
|
||||
conn->flags = CO_FL_NONE;
|
||||
conn->target = &s->obj_type;
|
||||
conn_prepare(conn, &check_conn_cb, s->check.proto, s->check.xprt, s);
|
||||
|
||||
@ -1382,6 +1383,16 @@ static struct task *process_chk(struct task *t)
|
||||
* which can happen on connect timeout or error.
|
||||
*/
|
||||
if (s->result == SRV_CHK_UNKNOWN) {
|
||||
if (expired && conn->xprt) {
|
||||
/* the check expired and the connection was not
|
||||
* yet closed, start by doing this.
|
||||
*/
|
||||
conn_xprt_close(conn);
|
||||
if (conn->ctrl)
|
||||
fd_delete(conn->t.sock.fd);
|
||||
conn->ctrl = NULL;
|
||||
}
|
||||
|
||||
if ((conn->flags & (CO_FL_CONNECTED|CO_FL_WAIT_L4_CONN)) == CO_FL_WAIT_L4_CONN) {
|
||||
/* L4 not established (yet) */
|
||||
if (conn->flags & CO_FL_ERROR)
|
||||
@ -1410,10 +1421,6 @@ static struct task *process_chk(struct task *t)
|
||||
else /* HTTP, SMTP, ... */
|
||||
set_server_check_status(s, HCHK_STATUS_L7TOUT, NULL);
|
||||
|
||||
conn_xprt_close(conn);
|
||||
if (conn->ctrl)
|
||||
fd_delete(conn->t.sock.fd);
|
||||
conn->ctrl = NULL;
|
||||
}
|
||||
else
|
||||
goto out_wait; /* timeout not reached, wait again */
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user