From e1a63c4f21011a3ae77dff624196561070c83446 Mon Sep 17 00:00:00 2001 From: Pierre Glaser Date: Wed, 26 Jun 2019 00:30:17 +0200 Subject: [PATCH] bpo-37244: Fix test_multiprocessing.test_resource_tracker() (GH-14288) Increase robustness of test_resource_tracker(): retry for 60 seconds. --- Lib/test/_test_multiprocessing.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py index 07cf09aaa4..eef262d723 100644 --- a/Lib/test/_test_multiprocessing.py +++ b/Lib/test/_test_multiprocessing.py @@ -5010,12 +5010,21 @@ class TestResourceTracker(unittest.TestCase): _resource_unlink(name1, rtype) p.terminate() p.wait() - time.sleep(2.0) - with self.assertRaises(OSError) as ctx: - _resource_unlink(name2, rtype) - # docs say it should be ENOENT, but OSX seems to give EINVAL - self.assertIn( - ctx.exception.errno, (errno.ENOENT, errno.EINVAL)) + + deadline = time.monotonic() + 60 + while time.monotonic() < deadline: + time.sleep(.5) + try: + _resource_unlink(name2, rtype) + except OSError as e: + # docs say it should be ENOENT, but OSX seems to give + # EINVAL + self.assertIn(e.errno, (errno.ENOENT, errno.EINVAL)) + break + else: + raise AssertionError( + f"A {rtype} resource was leaked after a process was " + f"abruptly terminated.") err = p.stderr.read().decode('utf-8') p.stderr.close() expected = ('resource_tracker: There appear to be 2 leaked {} ' -- 2.40.0