Trap call_rcu1() to make sure it won't be invoked twice for one rcu head by accident.
Suggested-by: Peter Maydell <[email protected]> Signed-off-by: Peter Xu <[email protected]> --- util/rcu.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/util/rcu.c b/util/rcu.c index b703c86f15..fc4b18812b 100644 --- a/util/rcu.c +++ b/util/rcu.c @@ -307,6 +307,11 @@ static void *call_rcu_thread(void *opaque) void call_rcu1(struct rcu_head *node, void (*func)(struct rcu_head *node)) { + /* + * Avoid accidental reuse of rcu_head, e.g. enqueuing one node twice + * (especially, when the function pointers are different). + */ + assert(node->func == NULL); node->func = func; enqueue(node); qatomic_inc(&rcu_call_count); -- 2.50.1
