diff options
author | Victor Stinner <vstinner@redhat.com> | 2019-06-14 11:02:51 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-14 11:02:51 (GMT) |
commit | 07559450b2d9179e4c99e0af088ce7550e549f94 (patch) | |
tree | f0e6cb7c58179b73b43fa984a83b3f51232345c7 | |
parent | b2f94730d947f25b8507c5f76202e917683e76f7 (diff) | |
download | cpython-07559450b2d9179e4c99e0af088ce7550e549f94.zip cpython-07559450b2d9179e4c99e0af088ce7550e549f94.tar.gz cpython-07559450b2d9179e4c99e0af088ce7550e549f94.tar.bz2 |
bpo-37278: Fix test_asyncio ProactorLoopCtrlC (GH-14074)
Join the thread to prevent leaking a running thread and leaking a
reference.
Cleanup also the test:
* asyncioWindowsProactorEventLoopPolicy became the default policy,
there is no need to set it manually.
* Only start the thread once the loop is running.
* Use a shorter sleep in the thread (100 ms rather than 1 sec).
* Use close_loop(loop) rather than loop.close().
* Use longer variable names.
-rw-r--r-- | Lib/test/test_asyncio/test_windows_events.py | 15 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Tests/2019-06-14-12-21-47.bpo-37278.z0HUOr.rst | 2 |
2 files changed, 10 insertions, 7 deletions
diff --git a/Lib/test/test_asyncio/test_windows_events.py b/Lib/test/test_asyncio/test_windows_events.py index 13aef7c..1e1c01d 100644 --- a/Lib/test/test_asyncio/test_windows_events.py +++ b/Lib/test/test_asyncio/test_windows_events.py @@ -45,20 +45,21 @@ class ProactorLoopCtrlC(test_utils.TestCase): def test_ctrl_c(self): def SIGINT_after_delay(): - time.sleep(1) + time.sleep(0.1) signal.raise_signal(signal.SIGINT) - asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy()) - l = asyncio.get_event_loop() + thread = threading.Thread(target=SIGINT_after_delay) + loop = asyncio.get_event_loop() try: - t = threading.Thread(target=SIGINT_after_delay) - t.start() - l.run_forever() + # only start the loop once the event loop is running + loop.call_soon(thread.start) + loop.run_forever() self.fail("should not fall through 'run_forever'") except KeyboardInterrupt: pass finally: - l.close() + self.close_loop(loop) + thread.join() class ProactorTests(test_utils.TestCase): diff --git a/Misc/NEWS.d/next/Tests/2019-06-14-12-21-47.bpo-37278.z0HUOr.rst b/Misc/NEWS.d/next/Tests/2019-06-14-12-21-47.bpo-37278.z0HUOr.rst new file mode 100644 index 0000000..3d3011b --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2019-06-14-12-21-47.bpo-37278.z0HUOr.rst @@ -0,0 +1,2 @@ +Fix test_asyncio ProactorLoopCtrlC: join the thread to prevent leaking a +running thread and leaking a reference. |