Note that the right place to call rcu_register_thread() is do_cpu_loop() and not just in clone_func(), since the original 'main' thread needs to call rcu_register_thread() as well.
Signed-off-by: Emilio G. Cota <c...@braap.org> --- linux-user/qemu.h | 1 + linux-user/syscall.c | 1 + 2 files changed, 2 insertions(+) diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 8af5e01..08e6609 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -203,6 +203,7 @@ void fork_end(int child); static inline void do_cpu_loop(CPUArchState *env) { + rcu_register_thread(); current_cpu = ENV_GET_CPU(env); cpu_loop(env); } diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 701c8fa..84909b4 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -5614,6 +5614,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, thread_cpu = NULL; object_unref(OBJECT(cpu)); g_free(ts); + rcu_unregister_thread(); pthread_exit(NULL); } #ifdef TARGET_GPROF -- 1.9.1