Commit 665486e0 authored by Victor Stinner's avatar Victor Stinner

Issue #20311: select.epoll.poll() now rounds the timeout away from zero,

instead of rounding towards zero. For example, a timeout of one microsecond is
now rounded to one millisecond, instead of being rounded to zero.
parent 9b7a1a1a
...@@ -46,6 +46,17 @@ class TestEPoll(unittest.TestCase): ...@@ -46,6 +46,17 @@ class TestEPoll(unittest.TestCase):
self.serverSocket.listen(1) self.serverSocket.listen(1)
self.connections = [self.serverSocket] self.connections = [self.serverSocket]
def test_timeout_rounding(self):
# epoll_wait() has a resolution of 1 millisecond, check if the timeout
# is correctly rounded to the upper bound
epoll = select.epoll()
self.addCleanup(epoll.close)
for timeout in (1e-2, 1e-3, 1e-4):
t0 = time.perf_counter()
epoll.poll(timeout)
dt = time.perf_counter() - t0
self.assertGreaterEqual(dt, timeout)
def tearDown(self): def tearDown(self):
for skt in self.connections: for skt in self.connections:
......
...@@ -43,6 +43,10 @@ Core and Builtins ...@@ -43,6 +43,10 @@ Core and Builtins
Library Library
------- -------
- Issue #20311: select.epoll.poll() now rounds the timeout away from zero,
instead of rounding towards zero. For example, a timeout of one microsecond
is now rounded to one millisecond, instead of being rounded to zero.
- Issue #20262: Warnings are raised now when duplicate names are added in the - Issue #20262: Warnings are raised now when duplicate names are added in the
ZIP file or too long ZIP file comment is truncated. ZIP file or too long ZIP file comment is truncated.
......
...@@ -1379,7 +1379,9 @@ pyepoll_poll(pyEpoll_Object *self, PyObject *args, PyObject *kwds) ...@@ -1379,7 +1379,9 @@ pyepoll_poll(pyEpoll_Object *self, PyObject *args, PyObject *kwds)
return NULL; return NULL;
} }
else { else {
timeout = (int)(dtimeout * 1000.0); /* epoll_wait() has a resolution of 1 millisecond, round away from zero
to wait *at least* dtimeout seconds. */
timeout = (int)ceil(dtimeout * 1000.0);
} }
if (maxevents == -1) { if (maxevents == -1) {
......
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