gh-101758: Fix Refleak-Related Failures in test_singlephase_variants (gh-101969)

gh-101891 is causing failures under `$> ./python -m test test_imp -R 3:3`.  Furthermore, with that fixed, "test_singlephase_variants" is leaking references.  This change addresses the first part, but skips the leaking tests until we can follow up with a fix.

https://github.com/python/cpython/issues/101758
This commit is contained in:
Eric Snow 2023-02-16 17:21:22 -07:00 committed by GitHub
parent 4d8959b73a
commit 984f8ab018
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 1 deletions

View File

@ -263,6 +263,7 @@ class ImportTests(unittest.TestCase):
with self.assertRaises(ImportError):
imp.load_dynamic('nonexistent', pathname)
@unittest.skip('known refleak (temporarily skipping)')
@requires_subinterpreters
@requires_load_dynamic
def test_singlephase_multiple_interpreters(self):
@ -329,9 +330,10 @@ class ImportTests(unittest.TestCase):
# However, globals are still shared.
_interpreters.run_string(interp2, script % 2)
@unittest.skip('known refleak (temporarily skipping)')
@requires_load_dynamic
def test_singlephase_variants(self):
'''Exercise the most meaningful variants described in Python/import.c.'''
# Exercise the most meaningful variants described in Python/import.c.
self.maxDiff = None
basename = '_testsinglephase'
@ -343,6 +345,11 @@ class ImportTests(unittest.TestCase):
_testsinglephase._clear_globals()
self.addCleanup(clean_up)
def add_ext_cleanup(name):
def clean_up():
_testinternalcapi.clear_extension(name, pathname)
self.addCleanup(clean_up)
modules = {}
def load(name):
assert name not in modules
@ -440,6 +447,7 @@ class ImportTests(unittest.TestCase):
# Check the "basic" module.
name = basename
add_ext_cleanup(name)
expected_init_count = 1
with self.subTest(name):
mod = load(name)
@ -457,6 +465,7 @@ class ImportTests(unittest.TestCase):
# Check its indirect variants.
name = f'{basename}_basic_wrapper'
add_ext_cleanup(name)
expected_init_count += 1
with self.subTest(name):
mod = load(name)
@ -480,6 +489,7 @@ class ImportTests(unittest.TestCase):
# Check its direct variant.
name = f'{basename}_basic_copy'
add_ext_cleanup(name)
expected_init_count += 1
with self.subTest(name):
mod = load(name)
@ -500,6 +510,7 @@ class ImportTests(unittest.TestCase):
# Check the non-basic variant that has no state.
name = f'{basename}_with_reinit'
add_ext_cleanup(name)
with self.subTest(name):
mod = load(name)
lookedup, initialized, cached = check_common(name, mod)
@ -518,6 +529,7 @@ class ImportTests(unittest.TestCase):
# Check the basic variant that has state.
name = f'{basename}_with_state'
add_ext_cleanup(name)
with self.subTest(name):
mod = load(name)
lookedup, initialized, cached = check_common(name, mod)