[Python-checkins] bpo-34263 Cap timeout submitted to epoll/select etc. to one day. (GH-8532)
Yury Selivanov
webhook-mailer at python.org
Tue Jul 31 10:06:21 EDT 2018
https://github.com/python/cpython/commit/944451cd8d3e897138f4b43569de13cd081ee251
commit: 944451cd8d3e897138f4b43569de13cd081ee251
branch: master
author: MartinAltmayer <martin.altmayer at web.de>
committer: Yury Selivanov <yury at magic.io>
date: 2018-07-31T10:06:12-04:00
summary:
bpo-34263 Cap timeout submitted to epoll/select etc. to one day. (GH-8532)
files:
A Misc/NEWS.d/next/Library/2018-07-28-17-00-36.bpo-34263.zUfRsu.rst
M Doc/library/asyncio-eventloop.rst
M Lib/asyncio/base_events.py
diff --git a/Doc/library/asyncio-eventloop.rst b/Doc/library/asyncio-eventloop.rst
index cf7b6d88725e..5b3d29dcaa46 100644
--- a/Doc/library/asyncio-eventloop.rst
+++ b/Doc/library/asyncio-eventloop.rst
@@ -173,10 +173,6 @@ Which clock is used depends on the (platform-specific) event loop
implementation; ideally it is a monotonic clock. This will generally be
a different clock than :func:`time.time`.
-.. note::
-
- Timeouts (relative *delay* or absolute *when*) should not exceed one day.
-
.. method:: AbstractEventLoop.call_later(delay, callback, *args, context=None)
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
index 75989a7641b8..78fe2a719f92 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -63,6 +63,9 @@
_HAS_IPv6 = hasattr(socket, 'AF_INET6')
+# Maximum timeout passed to select to avoid OS limitations
+MAXIMUM_SELECT_TIMEOUT = 24 * 3600
+
def _format_handle(handle):
cb = handle._callback
@@ -1708,7 +1711,7 @@ def _run_once(self):
elif self._scheduled:
# Compute the desired timeout.
when = self._scheduled[0]._when
- timeout = max(0, when - self.time())
+ timeout = min(max(0, when - self.time()), MAXIMUM_SELECT_TIMEOUT)
if self._debug and timeout != 0:
t0 = self.time()
diff --git a/Misc/NEWS.d/next/Library/2018-07-28-17-00-36.bpo-34263.zUfRsu.rst b/Misc/NEWS.d/next/Library/2018-07-28-17-00-36.bpo-34263.zUfRsu.rst
new file mode 100644
index 000000000000..799463b59163
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-07-28-17-00-36.bpo-34263.zUfRsu.rst
@@ -0,0 +1,2 @@
+asyncio's event loop will not pass timeouts longer than one day to
+epoll/select etc.
More information about the Python-checkins
mailing list