]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: check: Wake the check task if the check is finished in wake_srv_chk()
authorChristopher Faulet <cfaulet@haproxy.com>
Mon, 21 Jan 2019 13:15:50 +0000 (14:15 +0100)
committerWilly Tarreau <w@1wt.eu>
Tue, 22 Jan 2019 06:01:15 +0000 (07:01 +0100)
With tcp-check, the result of the check is set by the function tcpcheck_main()
from the I/O layer. So it is important to wake up the check task to handle the
result and finish the check. Otherwise, we will wait the task timeout to handle
the result of a tcp-check, delaying the next check by as much.

This patch also fixes a problem about email alerts reported by PiBa-NL (Pieter)
on the ML [1] on all versions since the 1.6. So this patch must be backported
from 1.9 to 1.6.

[1] https://www.mail-archive.com/haproxy@formilux.org/msg32190.html

src/checks.c

index 1a81ccdb3763ff07a5c085a5c9c7380e17369e7d..b0de770887f06f72533fa54bd67e094c7a0f4709 100644 (file)
@@ -1442,12 +1442,13 @@ static int wake_srv_chk(struct conn_stream *cs)
        }
 
        if (check->result != CHK_RES_UNKNOWN) {
-               /* We're here because nobody wants to handle the error, so we
-                * sure want to abort the hard way.
-                */
+               /* Check complete or aborted. If connection not yet closed do it
+                * now and wake the check task up to be sure the result is
+                * handled ASAP. */
                conn_sock_drain(conn);
                cs_close(cs);
                ret = -1;
+               task_wakeup(check->task, TASK_WOKEN_IO);
        }
 
        if (check->server)