From 81b7c9518c593f511741115fe575a8529e6f7c67 Mon Sep 17 00:00:00 2001 From: Aurelien DARRAGON Date: Wed, 7 Dec 2022 14:27:42 +0100 Subject: [PATCH] MINOR: check: use atomic for s->consecutive_errors Properly use atomic operations when dealing with s->consecutive_errors as we're using it out of server's lock. Race is negligible, no backport needed. --- src/check.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/check.c b/src/check.c index 931829fb5..0f7d19859 100644 --- a/src/check.c +++ b/src/check.c @@ -511,7 +511,7 @@ void set_server_check_status(struct check *check, short status, const char *desc /* clear consecutive_errors if observing is enabled */ if (s->onerror) - s->consecutive_errors = 0; + HA_ATOMIC_STORE(&s->consecutive_errors, 0); break; default: @@ -656,17 +656,15 @@ void __health_adjust(struct server *s, short status) if (!failed) { /* good: clear consecutive_errors */ - s->consecutive_errors = 0; + HA_ATOMIC_STORE(&s->consecutive_errors, 0); return; } - _HA_ATOMIC_INC(&s->consecutive_errors); - - if (s->consecutive_errors < s->consecutive_errors_limit) + if (HA_ATOMIC_ADD_FETCH(&s->consecutive_errors, 1) < s->consecutive_errors_limit) return; chunk_printf(&trash, "Detected %d consecutive errors, last one was: %s", - s->consecutive_errors, get_analyze_status(status)); + HA_ATOMIC_LOAD(&s->consecutive_errors), get_analyze_status(status)); HA_SPIN_LOCK(SERVER_LOCK, &s->lock); @@ -709,7 +707,7 @@ void __health_adjust(struct server *s, short status) HA_SPIN_UNLOCK(SERVER_LOCK, &s->lock); - s->consecutive_errors = 0; + HA_ATOMIC_STORE(&s->consecutive_errors, 0); _HA_ATOMIC_INC(&s->counters.failed_hana); if (s->check.fastinter) {