diff --git a/lib/timer.c b/lib/timer.c index 143c3a63a..813eade94 100644 --- a/lib/timer.c +++ b/lib/timer.c @@ -13,16 +13,18 @@ int setup_timer(timer_t * t_id, struct itimerval *timeout, void (*timeout_handler)(int, siginfo_t *, void *)) { + time_t sec = timeout->it_value.tv_sec; + long usec = timeout->it_value.tv_usec; struct sigaction sig_a; static struct sigevent sig_e = { .sigev_notify = SIGEV_SIGNAL, .sigev_signo = SIGALRM }; struct itimerspec val = { - .it_value.tv_sec = timeout->it_value.tv_sec, - .it_value.tv_nsec = timeout->it_value.tv_usec * 1000, - .it_interval.tv_sec = 0, - .it_interval.tv_nsec = 0 + .it_value.tv_sec = sec, + .it_value.tv_nsec = usec * 1000, + .it_interval.tv_sec = sec / 100, + .it_interval.tv_nsec = (sec ? sec % 100 : 1) * 10*1000*1000 }; if (sigemptyset(&sig_a.sa_mask))