diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2015-01-13 16:14:44 +0100 |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2015-01-13 16:14:44 +0100 |
commit | 7195e0c6ad301bb3c653ea5fb2ed242dddaf5ab8 (patch) | |
tree | 042a89cb62d69104f82204402eff9785a0f5aea6 | |
parent | 81052bee65e9e1c687d9052e64e8c0928dde950b (diff) | |
download | trollius-7195e0c6ad301bb3c653ea5fb2ed242dddaf5ab8.tar.gz |
Python issue #22922: Fix ProactorEventLoop.close()
Close the IocpProactor before closing the event loop. IocpProactor.close() can
call loop.call_soon(), which is forbidden when the event loop is closed.
-rw-r--r-- | asyncio/proactor_events.py | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/asyncio/proactor_events.py b/asyncio/proactor_events.py index 0a4d068..5986e37 100644 --- a/asyncio/proactor_events.py +++ b/asyncio/proactor_events.py @@ -387,13 +387,19 @@ class BaseProactorEventLoop(base_events.BaseEventLoop): raise RuntimeError("Cannot close a running event loop") if self.is_closed(): return + + # Call these methods before closing the event loop (before calling + # BaseEventLoop.close), because they can schedule callbacks with + # call_soon(), which is forbidden when the event loop is closed. self._stop_accept_futures() self._close_self_pipe() - super().close() self._proactor.close() self._proactor = None self._selector = None + # Close the event loop + super().close() + def sock_recv(self, sock, n): return self._proactor.recv(sock, n) |