From: Mathieu Desnoyers Date: Sun, 9 Dec 2018 11:37:09 +0000 (-0500) Subject: Fix: workqueue: struct urcu_work vs rcu_head mixup X-Git-Tag: v0.11.0~33 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=d25f25df027b158726f8a361e52f0e3a7529d5eb;p=userspace-rcu.git Fix: workqueue: struct urcu_work vs rcu_head mixup The workqueue code was derived from call-rcu, and its API expects a struct urcu_work for work items, but it internally iterates over struct rcu_head. This is not an issue at runtime because both structures have the exact same layout and content, but it is a type mixup nevertheless. Use the right type in the implementation. Signed-off-by: Mathieu Desnoyers --- diff --git a/src/workqueue.c b/src/workqueue.c index db0c63a..6707ffe 100644 --- a/src/workqueue.c +++ b/src/workqueue.c @@ -221,11 +221,11 @@ static void *workqueue_thread(void *arg) cbcount = 0; __cds_wfcq_for_each_blocking_safe(&cbs_tmp_head, &cbs_tmp_tail, cbs, cbs_tmp_n) { - struct rcu_head *rhp; + struct urcu_work *uwp; - rhp = caa_container_of(cbs, - struct rcu_head, next); - rhp->func(rhp); + uwp = caa_container_of(cbs, + struct urcu_work, next); + uwp->func(uwp); cbcount++; } uatomic_sub(&workqueue->qlen, cbcount);