From: Willy Tarreau Date: Fri, 17 May 2019 09:46:04 +0000 (+0200) Subject: MINOR: task: put barriers after each write to curr_task X-Git-Tag: v2.0-dev4~68 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=01f3489752ec6ab4279fe975af0053c75a2a56fc;p=thirdparty%2Fhaproxy.git MINOR: task: put barriers after each write to curr_task This one may be watched by signal handlers, we don't want the compiler to optimize its assignment away at the end of the loop and leave some wandering pointers there. --- diff --git a/src/task.c b/src/task.c index 0e5419da7e..afdd2b85e4 100644 --- a/src/task.c +++ b/src/task.c @@ -385,6 +385,7 @@ void process_runnable_tasks() } curr_task = (struct task *)t; + __ha_barrier_store(); if (likely(process == process_stream)) t = process_stream(t, ctx, state); else if (process != NULL) @@ -392,6 +393,7 @@ void process_runnable_tasks() else { __task_free(t); curr_task = NULL; + __ha_barrier_store(); /* We don't want max_processed to be decremented if * we're just freeing a destroyed task, we should only * do so if we really ran a task. @@ -399,6 +401,7 @@ void process_runnable_tasks() continue; } curr_task = NULL; + __ha_barrier_store(); /* If there is a pending state we have to wake up the task * immediately, else we defer it into wait queue */