提交 49cf5728 编写于 作者: P Paolo Bonzini 提交者: Anthony Liguori

vl: delay thread initialization after daemonization

Commit ac4119c0 (chardev: Use timer instead of bottom-half to postpone
open event, 2012-10-12) moved the alarm timer initialization to an earlier
point but failed to consider that it depends on qemu_init_main_loop.

Later, commit 1c53786f (vl: init main loop earlier, 2012-10-30) fixed
this, but left -daemonize in two different ways.  First, timers need to
be reinitialized after forking.  Second, the global mutex was being held
by the parent, and thus dropped after forking.

The first is now fixed using pthread_atfork.  For the second part,
make sure that the global mutex is not taken before daemonization,
and similarly delay qemu_thread_self.
Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
上级 f9ab4654
......@@ -128,7 +128,6 @@ int qemu_init_main_loop(void)
exit(1);
}
qemu_mutex_lock_iothread();
ret = qemu_signal_init();
if (ret) {
return ret;
......
......@@ -3477,7 +3477,6 @@ int main(int argc, char **argv, char **envp)
}
loc_set_none();
qemu_init_cpu_loop();
if (qemu_init_main_loop()) {
fprintf(stderr, "qemu_init_main_loop failed\n");
exit(1);
......@@ -3677,6 +3676,9 @@ int main(int argc, char **argv, char **envp)
os_set_line_buffering();
qemu_init_cpu_loop();
qemu_mutex_lock_iothread();
#ifdef CONFIG_SPICE
/* spice needs the timers to be initialized by this point */
qemu_spice_init();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册