From dd4edbc5ad4cdb47e051e7cc0801d31d3786588b Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Tue, 25 Jun 2019 15:49:31 -0700 Subject: [PATCH] bpo-37244: Fix test_multiprocessing.test_resource_tracker() (GH-14288) Increase robustness of test_resource_tracker(): retry for 60 seconds. (cherry picked from commit e1a63c4f21011a3ae77dff624196561070c83446) Co-authored-by: Pierre Glaser --- 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 07cf09aaa4a..eef262d723d 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 {} '