From 8b66dbb212d7dffbf9fb545dad2a3400aead1461 Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Fri, 14 Jun 2019 04:53:13 -0700 Subject: [PATCH] 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. (cherry picked from commit 07559450b2d9179e4c99e0af088ce7550e549f94) Co-authored-by: Victor Stinner --- Lib/test/test_asyncio/test_windows_events.py | 15 ++++++++------- .../2019-06-14-12-21-47.bpo-37278.z0HUOr.rst | 2 ++ 2 files changed, 10 insertions(+), 7 deletions(-) create mode 100644 Misc/NEWS.d/next/Tests/2019-06-14-12-21-47.bpo-37278.z0HUOr.rst diff --git a/Lib/test/test_asyncio/test_windows_events.py b/Lib/test/test_asyncio/test_windows_events.py index 13aef7cf1f7..1e1c01d713b 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 00000000000..3d3011b51c5 --- /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.