lkml.org 
[lkml]   [2004]   [Feb]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH][4/4] poll()/select() timeout behavior
This patch forces select() to wait *at least* the specified timeout if
no events have occurred, same as poll(). The SUSv3 man page for select(2)
says:

"If the timeout parameter is not a null pointer, it specifies a maximum
interval to wait for the selection to complete. If the specified
time interval expires without any requested operation becoming ready,
the function shall return."

Additionally:

"If the requested timeout interval requires a finer granularity than
the implementation supports, the actual timeout interval shall be
rounded up to the next supported value."

Unfortunately, fixing the fencepost error places a hard lower limit of
1/HZ on the time slept, and increases the average minimum sleep time
threefold, from 1/(2*HZ) jiffy to 3/(2*HZ).

Please consider applying.

Bill Rugolsky

--- linux/fs/select.c 2004-02-20 14:29:11.000000000 -0500
+++ linux/fs/select.c 2004-02-20 14:30:18.326814232 -0500
@@ -313,8 +313,8 @@
if (sec < 0 || usec < 0 || usec >= 1000000)
goto out_nofds;

- if ((unsigned long) sec < (MAX_SCHEDULE_TIMEOUT-1) / HZ - 1) {
- timeout = ROUND_UP(usec, 1000000/HZ);
+ if ((unsigned long) sec < (MAX_SCHEDULE_TIMEOUT-2) / HZ - 1) {
+ timeout = ROUND_UP(usec, 1000000/HZ) + 1;
timeout += sec * (unsigned long) HZ;
} else {
timeout = MAX_SCHEDULE_TIMEOUT-1;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 14:01    [W:0.069 / U:0.152 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site