#30624 / selectors: use bare except clause in order to not leave the fd in a bad state in case of error (#2082)
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 @@
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 @@
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 @@
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.