From 05dc20f992754c4ed2b1601026263e1f309cead9 Mon Sep 17 00:00:00 2001 From: Giampaolo Rodola Date: Sun, 11 Jun 2017 01:51:52 +0200 Subject: #30624 / selectors: use bare except clause in order to not leave the fd in a bad state in case of error (#2082) --- Lib/selectors.py | 4 ++-- Misc/NEWS | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Lib/selectors.py b/Lib/selectors.py index edde22c..f8b17a1 100644 --- a/Lib/selectors.py +++ b/Lib/selectors.py @@ -387,7 +387,7 @@ class _PollLikeSelector(_BaseSelectorImpl): selector_events |= self._EVENT_WRITE try: self._selector.modify(key.fd, selector_events) - except Exception: + except: super().unregister(fileobj) raise changed = True @@ -524,7 +524,7 @@ if hasattr(select, 'kqueue'): kev = select.kevent(key.fd, select.KQ_FILTER_WRITE, select.KQ_EV_ADD) self._selector.control([kev], 0, 0) - except Exception: + except: super().unregister(fileobj) raise return key diff --git a/Misc/NEWS b/Misc/NEWS index 20cea47..3333326 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -350,6 +350,10 @@ Extension Modules Library ------- +- bpo-30624: selectors does not take KeyboardInterrupt and SystemExit into + account, leaving a fd in a bad state in case of error. Patch by Giampaolo + Rodola'. + - bpo-30595: multiprocessing.Queue.get() with a timeout now polls its reader in non-blocking mode if it succeeded to aquire the lock but the acquire took longer than the timeout. -- cgit v0.12