diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2015-03-31 09:48:34 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2015-03-31 09:48:34 (GMT) |
commit | 4448c08451e947ccf197742d22fa49adba71e363 (patch) | |
tree | f1183e1f289ad178ec22e274644b86a6c3a0cf55 /Lib | |
parent | b6faf0dfa7e5d9f5b9f09bc1d1113069f1c962ab (diff) | |
download | cpython-4448c08451e947ccf197742d22fa49adba71e363.zip cpython-4448c08451e947ccf197742d22fa49adba71e363.tar.gz cpython-4448c08451e947ccf197742d22fa49adba71e363.tar.bz2 |
Issue #23485: select.kqueue.control() is now retried when interrupted by a signal
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/selectors.py | 6 | ||||
-rw-r--r-- | Lib/test/eintrdata/eintr_tester.py | 15 |
2 files changed, 15 insertions, 6 deletions
diff --git a/Lib/selectors.py b/Lib/selectors.py index 2a0a44c..a3f2e78 100644 --- a/Lib/selectors.py +++ b/Lib/selectors.py @@ -549,11 +549,9 @@ if hasattr(select, 'kqueue'): def select(self, timeout=None): timeout = None if timeout is None else max(timeout, 0) max_ev = len(self._fd_to_key) + kev_list = self._kqueue.control(None, max_ev, timeout) + ready = [] - try: - kev_list = self._kqueue.control(None, max_ev, timeout) - except InterruptedError: - return ready for kev in kev_list: fd = kev.ident flag = kev.filter diff --git a/Lib/test/eintrdata/eintr_tester.py b/Lib/test/eintrdata/eintr_tester.py index 0df9762..4e9b992 100644 --- a/Lib/test/eintrdata/eintr_tester.py +++ b/Lib/test/eintrdata/eintr_tester.py @@ -315,8 +315,8 @@ class SelectEINTRTest(EINTRBaseTest): def test_select(self): t0 = time.monotonic() select.select([], [], [], self.sleep_time) - self.stop_alarm() dt = time.monotonic() - t0 + self.stop_alarm() self.assertGreaterEqual(dt, self.sleep_time) @unittest.skipUnless(hasattr(select, 'poll'), 'need select.poll') @@ -325,8 +325,8 @@ class SelectEINTRTest(EINTRBaseTest): t0 = time.monotonic() poller.poll(self.sleep_time * 1e3) - self.stop_alarm() dt = time.monotonic() - t0 + self.stop_alarm() self.assertGreaterEqual(dt, self.sleep_time) @unittest.skipUnless(hasattr(select, 'epoll'), 'need select.epoll') @@ -336,8 +336,19 @@ class SelectEINTRTest(EINTRBaseTest): t0 = time.monotonic() poller.poll(self.sleep_time) + dt = time.monotonic() - t0 self.stop_alarm() + self.assertGreaterEqual(dt, self.sleep_time) + + @unittest.skipUnless(hasattr(select, 'kqueue'), 'need select.kqueue') + def test_kqueue(self): + kqueue = select.kqueue() + self.addCleanup(kqueue.close) + + t0 = time.monotonic() + kqueue.control(None, 1, self.sleep_time) dt = time.monotonic() - t0 + self.stop_alarm() self.assertGreaterEqual(dt, self.sleep_time) |