From: george anzinger Timer expirations are being reported twice. 25-akpm/kernel/posix-timers.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) diff -puN kernel/posix-timers.c~posix-timer-double-expiration-fix kernel/posix-timers.c --- 25/kernel/posix-timers.c~posix-timer-double-expiration-fix Tue Mar 25 18:37:19 2003 +++ 25-akpm/kernel/posix-timers.c Tue Mar 25 18:37:19 2003 @@ -230,8 +230,10 @@ static void schedule_next_timer(struct k return; } posix_get_now(&now); - while (posix_time_before(&timr->it_timer, &now)) + do { posix_bump_timer(timr); + }while (posix_time_before(&timr->it_timer, &now)); + timr->it_overrun_last = timr->it_overrun; timr->it_overrun = -1; timr->it_requeue_pending = 0; @@ -587,7 +589,6 @@ static struct k_itimer * lock_timer(time void inline do_timer_gettime(struct k_itimer *timr, struct itimerspec *cur_setting) { - long sub_expires; unsigned long expires; struct now_struct now; @@ -607,7 +608,7 @@ do_timer_gettime(struct k_itimer *timr, posix_bump_timer(timr); else if (!timer_pending(&timr->it_timer)) - sub_expires = expires = 0; + expires = 0; if (expires) expires -= now.jiffies; } _