]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: email-alert: don't set server check status from a email-alert task
authorPiBa-NL <pba_2k3@yahoo.com>
Wed, 6 Dec 2017 00:35:43 +0000 (01:35 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 8 Dec 2017 04:58:56 +0000 (05:58 +0100)
This avoids possible 100% cpu usage deadlock on a EMAIL_ALERTS_LOCK and
avoids sending lots of emails when 'option log-health-checks' is used.
It is avoided to change the server state and possibly queue a new email
while processing the email alert by setting check->status to
HCHK_STATUS_UNKNOWN which will exit the set_server_check_status(..) early.

This needs to be backported to 1.8.

src/checks.c

index eaf84a2257478e217c022ab36878b589ed866e48..3a6f0203819b747ca67714dda41490c4e5cab9e7 100644 (file)
@@ -3145,7 +3145,7 @@ static struct task *process_email_alert(struct task *t)
                        t->expire             = now_ms;
                        check->server         = alert->srv;
                        check->tcpcheck_rules = &alert->tcpcheck_rules;
-                       check->status         = HCHK_STATUS_INI;
+                       check->status         = HCHK_STATUS_UNKNOWN; // the UNKNOWN status is used to exit set_server_check_status(.) early
                        check->state         |= CHK_ST_ENABLED;
                }