提交 ca5a2a4b 编写于 作者: P Paolo Bonzini 提交者: Aurelien Jarno

fix race between timer firing vs. alarm_timer->pending = 0

The period for Win32 timers is very short and always the same
independent of dynticks, so it's possible that the timer fires
before qemu_run_all_timers has reset alarm_timer->pending to zero.
Reset alarm_timer->pending before rearming.
Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: NAurelien Jarno <aurelien@aurel32.net>
上级 06b611c4
......@@ -706,14 +706,14 @@ void configure_icount(const char *option)
void qemu_run_all_timers(void)
{
alarm_timer->pending = 0;
/* rearm timer, if not periodic */
if (alarm_timer->expired) {
alarm_timer->expired = 0;
qemu_rearm_alarm_timer(alarm_timer);
}
alarm_timer->pending = 0;
/* vm time timers */
if (vm_running) {
qemu_run_timers(vm_clock);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册