]> granicus.if.org Git - python/commitdiff
[3.6] bpo-34263 Cap timeout submitted to epoll/select etc. to one day. (GH-8532)...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 31 Jul 2018 15:28:56 +0000 (08:28 -0700)
committerYury Selivanov <yury@magic.io>
Tue, 31 Jul 2018 15:28:56 +0000 (11:28 -0400)
Lib/asyncio/base_events.py
Misc/NEWS.d/next/Library/2018-07-28-17-00-36.bpo-34263.zUfRsu.rst [new file with mode: 0644]

index 79f0d63c5726e814e72e230a25e9f4b64fdb2fb0..30ac5924d06bd4034440b55331a545cf75fd8d97 100644 (file)
@@ -56,6 +56,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
@@ -1378,7 +1381,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 (file)
index 0000000..799463b
--- /dev/null
@@ -0,0 +1,2 @@
+asyncio's event loop will not pass timeouts longer than one day to
+epoll/select etc.