diff --git a/vl.c b/vl.c index f9c4d7e..105ce6e 100644 --- a/vl.c +++ b/vl.c @@ -1340,6 +1340,11 @@ static int timer_load(QEMUFile *f, void *opaque, int version_id) void CALLBACK host_alarm_handler(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2) #else +static void host_alarm_handler_empty(int host_signum) +{ + return; +} + static void host_alarm_handler(int host_signum) #endif { @@ -1571,15 +1576,15 @@ static int dynticks_start_timer(struct qemu_alarm_timer *t) struct sigevent ev = { { 0 } }; timer_t host_timer; struct sigaction act; + struct itimerspec timeout; sigfillset(&act.sa_mask); act.sa_flags = 0; - act.sa_handler = host_alarm_handler; + act.sa_handler = host_alarm_handler_empty; sigaction(SIGALRM, &act, NULL); - ev.sigev_notify = SIGEV_SIGNAL; - ev.sigev_signo = SIGALRM; + ev.sigev_notify = SIGEV_NONE; if (timer_create(CLOCK_REALTIME, &ev, &host_timer)) { perror("timer_create"); @@ -1589,6 +1594,11 @@ static int dynticks_start_timer(struct qemu_alarm_timer *t) return -1; } + timeout.it_interval.tv_sec = 0; + timeout.it_interval.tv_nsec = 10000; /* 0 for one-shot timer */ + timeout.it_value.tv_sec = 0; + timeout.it_value.tv_nsec = 10000; + timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL); t->priv = (void *)(long)host_timer; @@ -1604,6 +1614,7 @@ static void dynticks_stop_timer(struct qemu_alarm_timer *t) static void dynticks_rearm_timer(struct qemu_alarm_timer *t) { + return; timer_t host_timer = (timer_t)(long)t->priv; struct itimerspec timeout; int64_t nearest_delta_us = INT64_MAX;