]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: checks: pin the check to its thread upon wakeup
authorWilly Tarreau <w@1wt.eu>
Fri, 1 Sep 2023 05:27:56 +0000 (07:27 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 1 Sep 2023 06:26:06 +0000 (08:26 +0200)
When a check leaves the sleeping state, we must pin it to the thread that
is processing it. It's normally always the case after the first execution,
but initial checks that start assigned to any thread (-1) could be assigned
much later, causing problems with planned changes involving queuing. Thus
better do it early, so that all threads start properly pinned.

src/check.c

index fce152a96e0833c276a2bed3474d3e79dadbde5a..32c03da4c9c195af2d5e42f48d91a05f887cba31 100644 (file)
@@ -1157,6 +1157,9 @@ struct task *process_chk_conn(struct task *t, void *context, unsigned int state)
                                return t;
                        }
                }
+
+               /* OK we're keeping it so this check is ours now */
+               task_set_thread(t, tid);
        }
 
        if (check->server)
@@ -1212,8 +1215,6 @@ struct task *process_chk_conn(struct task *t, void *context, unsigned int state)
                check->state |= CHK_ST_INPROGRESS;
                TRACE_STATE("init new health-check", CHK_EV_TASK_WAKE|CHK_EV_HCHK_START, check);
 
-               task_set_thread(t, tid);
-
                check->current_step = NULL;
 
                check->sc = sc_new_from_check(check, SC_FL_NONE);