From: Olivier Houchard Date: Fri, 10 Jan 2020 15:46:48 +0000 (+0100) Subject: BUG/MEDIUM: tasks: Use the MT macros in tasklet_free(). X-Git-Tag: v2.2-dev1~121 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c4f40acbf6cd33b874b224a89ee2a64eb3035d5;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: tasks: Use the MT macros in tasklet_free(). In tasklet_free(), to attempt to remove ourself, use MT_LIST_DEL, we can't just use LIST_DEL(), as we theorically could be in the shared tasklet list. This should be backported to 2.1. --- diff --git a/include/proto/task.h b/include/proto/task.h index f3cc3eb8cc..3f1d2ad66d 100644 --- a/include/proto/task.h +++ b/include/proto/task.h @@ -397,10 +397,8 @@ static inline void task_destroy(struct task *t) /* Should only be called by the thread responsible for the tasklet */ static inline void tasklet_free(struct tasklet *tl) { - if (!LIST_ISEMPTY(&tl->list)) { - LIST_DEL(&tl->list); + if (MT_LIST_DEL((struct mt_list *)&tl->list)) _HA_ATOMIC_SUB(&tasks_run_queue, 1); - } pool_free(pool_head_tasklet, tl); if (unlikely(stopping))