Commit fb6c1a0c authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] sys_alarm() return value fix

From: Kurt Garloff <garloff@suse.de>

when calling

alarm(1); alarm(0);

the second alarm can wrongly return 2. This makes an LSB test fail.

It happens due to rounding errors in the timeval to jiffie conversion and
back.  On i386 with HZ =3D=3D 1000, there would not need to be rounding
error IMVHO, but they even occur there.  On HZ=3D1024 platforms, they may
even be unavoidable.

Attached patch fixes the return value of alarm().
parent c0ce26a8
...@@ -868,7 +868,7 @@ asmlinkage unsigned long sys_alarm(unsigned int seconds) ...@@ -868,7 +868,7 @@ asmlinkage unsigned long sys_alarm(unsigned int seconds)
oldalarm = it_old.it_value.tv_sec; oldalarm = it_old.it_value.tv_sec;
/* ehhh.. We can't return 0 if we have an alarm pending.. */ /* ehhh.. We can't return 0 if we have an alarm pending.. */
/* And we'd better return too much than too little anyway */ /* And we'd better return too much than too little anyway */
if (it_old.it_value.tv_usec) if ((!oldalarm && it_old.it_value.tv_usec) || it_old.it_value.tv_usec >= 500000)
oldalarm++; oldalarm++;
return oldalarm; return oldalarm;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment