From patchwork Fri Mar 19 10:30:35 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: fix race between timer firing vs. alarm_timer->pending = 0 From: Paolo Bonzini X-Patchwork-Id: 48132 Message-Id: <1268994635-5788-1-git-send-email-pbonzini@redhat.com> To: qemu-devel@nongnu.org Cc: geleman@gmail.com, aliguori@us.ibm.com Date: Fri, 19 Mar 2010 11:30:35 +0100 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: Paolo Bonzini Signed-off-by: Paolo Bonzini --- qemu-timer.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/qemu-timer.c b/qemu-timer.c index 329d3a4..49eac86 100644 --- a/qemu-timer.c +++ b/qemu-timer.c @@ -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);