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.