
From: george anzinger <george@mvista.com>

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;
 	}

_
