summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2015-01-13 15:13:36 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2015-01-13 15:13:36 (GMT)
commit7d5a95627b44b868a58128344431b8eb834b9bcb (patch)
tree031b6aa0c65286fc6b1b78ea72402a41631c60e1
parent610bc6a211be33b390a9910943f1f9fb7656f634 (diff)
parent9036e49ba1acdd49ed7aa86a228a2657ca72c336 (diff)
downloadcpython-7d5a95627b44b868a58128344431b8eb834b9bcb.zip
cpython-7d5a95627b44b868a58128344431b8eb834b9bcb.tar.gz
cpython-7d5a95627b44b868a58128344431b8eb834b9bcb.tar.bz2
Merge 3.4 (asyncio)
-rw-r--r--Lib/asyncio/proactor_events.py8
-rw-r--r--Lib/test/test_asyncio/test_windows_events.py3
2 files changed, 9 insertions, 2 deletions
diff --git a/Lib/asyncio/proactor_events.py b/Lib/asyncio/proactor_events.py
index 0a4d068..5986e37 100644
--- a/Lib/asyncio/proactor_events.py
+++ b/Lib/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)
diff --git a/Lib/test/test_asyncio/test_windows_events.py b/Lib/test/test_asyncio/test_windows_events.py
index 9b264a6..f9b3dd1 100644
--- a/Lib/test/test_asyncio/test_windows_events.py
+++ b/Lib/test/test_asyncio/test_windows_events.py
@@ -67,7 +67,8 @@ class ProactorTests(test_utils.TestCase):
clients = []
for i in range(5):
stream_reader = asyncio.StreamReader(loop=self.loop)
- protocol = asyncio.StreamReaderProtocol(stream_reader)
+ protocol = asyncio.StreamReaderProtocol(stream_reader,
+ loop=self.loop)
trans, proto = yield from self.loop.create_pipe_connection(
lambda: protocol, ADDRESS)
self.assertIsInstance(trans, asyncio.Transport)