Issue #23865: close() methods in multiple modules now are idempotent and more

robust at shutdown. If needs to release multiple resources, they are released
even if errors are occured.
This commit is contained in:
Serhiy Storchaka 2015-04-10 13:29:28 +03:00
commit 2116b12da5
27 changed files with 315 additions and 209 deletions

View file

@ -439,8 +439,10 @@ if hasattr(select, 'epoll'):
return ready
def close(self):
self._epoll.close()
super().close()
try:
self._epoll.close()
finally:
super().close()
if hasattr(select, 'devpoll'):
@ -496,8 +498,10 @@ if hasattr(select, 'devpoll'):
return ready
def close(self):
self._devpoll.close()
super().close()
try:
self._devpoll.close()
finally:
super().close()
if hasattr(select, 'kqueue'):
@ -566,8 +570,10 @@ if hasattr(select, 'kqueue'):
return ready
def close(self):
self._kqueue.close()
super().close()
try:
self._kqueue.close()
finally:
super().close()
# Choose the best implementation, roughly: