diff options
author | MartinAltmayer <martin.altmayer@web.de> | 2018-07-31 14:06:12 (GMT) |
---|---|---|
committer | Yury Selivanov <yury@magic.io> | 2018-07-31 14:06:12 (GMT) |
commit | 944451cd8d3e897138f4b43569de13cd081ee251 (patch) | |
tree | 07230ba80372c8efb6da78ac994934ad73167291 | |
parent | 9c18b1ae527346bc178250ad1ca07bffdacde5dd (diff) | |
download | cpython-944451cd8d3e897138f4b43569de13cd081ee251.zip cpython-944451cd8d3e897138f4b43569de13cd081ee251.tar.gz cpython-944451cd8d3e897138f4b43569de13cd081ee251.tar.bz2 |
bpo-34263 Cap timeout submitted to epoll/select etc. to one day. (GH-8532)
-rw-r--r-- | Doc/library/asyncio-eventloop.rst | 4 | ||||
-rw-r--r-- | Lib/asyncio/base_events.py | 5 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2018-07-28-17-00-36.bpo-34263.zUfRsu.rst | 2 |
3 files changed, 6 insertions, 5 deletions
diff --git a/Doc/library/asyncio-eventloop.rst b/Doc/library/asyncio-eventloop.rst index cf7b6d8..5b3d29d 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 75989a7..78fe2a7 100644 --- a/Lib/asyncio/base_events.py +++ b/Lib/asyncio/base_events.py @@ -63,6 +63,9 @@ _FATAL_ERROR_IGNORE = (BrokenPipeError, _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 @@ class BaseEventLoop(events.AbstractEventLoop): 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 0000000..799463b --- /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. |