summaryrefslogtreecommitdiffstats
path: root/Lib/selectors.py
diff options
context:
space:
mode:
authorYury Selivanov <yury@magic.io>2016-09-15 23:31:33 (GMT)
committerYury Selivanov <yury@magic.io>2016-09-15 23:31:33 (GMT)
commit993b6f5c7ba072ca58398500570da6e16489f277 (patch)
tree25288cd28d2b4c4e88700f57d87c36d41bc25460 /Lib/selectors.py
parent732ba01259e805ce6184182e9c26d1a679e0e3b2 (diff)
parent525aedc5fae90e5195adb2d34ec33f1a773540fc (diff)
downloadcpython-993b6f5c7ba072ca58398500570da6e16489f277.zip
cpython-993b6f5c7ba072ca58398500570da6e16489f277.tar.gz
cpython-993b6f5c7ba072ca58398500570da6e16489f277.tar.bz2
Merge 3.5 (issue #27759)
Diffstat (limited to 'Lib/selectors.py')
-rw-r--r--Lib/selectors.py26
1 files changed, 17 insertions, 9 deletions
diff --git a/Lib/selectors.py b/Lib/selectors.py
index d8769e3..89680a2 100644
--- a/Lib/selectors.py
+++ b/Lib/selectors.py
@@ -408,7 +408,11 @@ if hasattr(select, 'epoll'):
epoll_events |= select.EPOLLIN
if events & EVENT_WRITE:
epoll_events |= select.EPOLLOUT
- self._epoll.register(key.fd, epoll_events)
+ try:
+ self._epoll.register(key.fd, epoll_events)
+ except BaseException:
+ super().unregister(fileobj)
+ raise
return key
def unregister(self, fileobj):
@@ -530,14 +534,18 @@ if hasattr(select, 'kqueue'):
def register(self, fileobj, events, data=None):
key = super().register(fileobj, events, data)
- if events & EVENT_READ:
- kev = select.kevent(key.fd, select.KQ_FILTER_READ,
- select.KQ_EV_ADD)
- self._kqueue.control([kev], 0, 0)
- if events & EVENT_WRITE:
- kev = select.kevent(key.fd, select.KQ_FILTER_WRITE,
- select.KQ_EV_ADD)
- self._kqueue.control([kev], 0, 0)
+ try:
+ if events & EVENT_READ:
+ kev = select.kevent(key.fd, select.KQ_FILTER_READ,
+ select.KQ_EV_ADD)
+ self._kqueue.control([kev], 0, 0)
+ if events & EVENT_WRITE:
+ kev = select.kevent(key.fd, select.KQ_FILTER_WRITE,
+ select.KQ_EV_ADD)
+ self._kqueue.control([kev], 0, 0)
+ except BaseException:
+ super().unregister(fileobj)
+ raise
return key
def unregister(self, fileobj):