From 01f3489752ec6ab4279fe975af0053c75a2a56fc Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 17 May 2019 11:46:04 +0200 Subject: [PATCH] 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. --- src/task.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/task.c b/src/task.c index 0e5419da7..afdd2b85e 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 */ -- 2.47.3