cpython: 202995833ef4 (original) (raw)
Mercurial > cpython
changeset 93784:202995833ef4
selectors: Make sure EpollSelecrtor.select() works when no FD is registered. Closes issue #23009. [#23009]
Yury Selivanov yselivanov@sprymix.com | |
---|---|
date | Mon, 08 Dec 2014 12:22:33 -0500 |
parents | dd21f8ef033a(current diff)b2ee06684b6a(diff) |
children | f7faceb6c60a |
files | Lib/selectors.py Lib/test/test_selectors.py |
diffstat | 2 files changed, 11 insertions(+), 1 deletions(-)[+] [-] Lib/selectors.py 7 Lib/test/test_selectors.py 5 |
line wrap: on
line diff
--- a/Lib/selectors.py +++ b/Lib/selectors.py @@ -418,7 +418,12 @@ if hasattr(select, 'epoll'): # epoll_wait() has a resolution of 1 millisecond, round away # from zero to wait at least timeout seconds. timeout = math.ceil(timeout * 1e3) * 1e-3
max_ev = len(self._fd_to_key)[](#l1.7)
# epoll_wait() expectcs `maxevents` to be greater than zero;[](#l1.9)
# we want to make sure that `select()` can be called when no[](#l1.10)
# FD is registered.[](#l1.11)
max_ev = max(len(self._fd_to_key), 1)[](#l1.12)
+ ready = [] try: fd_event_list = self._epoll.poll(timeout, max_ev)
--- a/Lib/test/test_selectors.py +++ b/Lib/test/test_selectors.py @@ -316,6 +316,11 @@ class BaseSelectorTestCase(unittest.Test self.assertEqual(bufs, [MSG] * NUM_SOCKETS)
- def test_empty_select(self):
s = self.SELECTOR()[](#l2.8)
self.addCleanup(s.close)[](#l2.9)
self.assertEqual(s.select(timeout=0), [])[](#l2.10)
+ def test_timeout(self): s = self.SELECTOR() self.addCleanup(s.close)