mirror of
https://github.com/python/cpython.git
synced 2025-10-10 00:43:41 +00:00
bpo-47084: Clear Unicode cached representations on finalization (GH-32032)
This commit is contained in:
parent
7d810b6a4e
commit
88872a29f1
5 changed files with 78 additions and 18 deletions
|
@ -1645,24 +1645,29 @@ class MiscTests(EmbeddingTestsMixin, unittest.TestCase):
|
|||
'-X showrefcount requires a Python debug build')
|
||||
def test_no_memleak(self):
|
||||
# bpo-1635741: Python must release all memory at exit
|
||||
cmd = [sys.executable, "-I", "-X", "showrefcount", "-c", "pass"]
|
||||
proc = subprocess.run(cmd,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT,
|
||||
text=True)
|
||||
self.assertEqual(proc.returncode, 0)
|
||||
out = proc.stdout.rstrip()
|
||||
match = re.match(r'^\[(-?\d+) refs, (-?\d+) blocks\]', out)
|
||||
if not match:
|
||||
self.fail(f"unexpected output: {out!a}")
|
||||
refs = int(match.group(1))
|
||||
blocks = int(match.group(2))
|
||||
self.assertEqual(refs, 0, out)
|
||||
if not MS_WINDOWS:
|
||||
self.assertEqual(blocks, 0, out)
|
||||
else:
|
||||
# bpo-46857: on Windows, Python still leaks 1 memory block at exit
|
||||
self.assertIn(blocks, (0, 1), out)
|
||||
tests = (
|
||||
('off', 'pass'),
|
||||
('on', 'pass'),
|
||||
('off', 'import __hello__'),
|
||||
('on', 'import __hello__'),
|
||||
)
|
||||
for flag, stmt in tests:
|
||||
xopt = f"frozen_modules={flag}"
|
||||
cmd = [sys.executable, "-I", "-X", "showrefcount", "-X", xopt, "-c", stmt]
|
||||
proc = subprocess.run(cmd,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT,
|
||||
text=True)
|
||||
self.assertEqual(proc.returncode, 0)
|
||||
out = proc.stdout.rstrip()
|
||||
match = re.match(r'^\[(-?\d+) refs, (-?\d+) blocks\]', out)
|
||||
if not match:
|
||||
self.fail(f"unexpected output: {out!a}")
|
||||
refs = int(match.group(1))
|
||||
blocks = int(match.group(2))
|
||||
with self.subTest(frozen_modules=flag, stmt=stmt):
|
||||
self.assertEqual(refs, 0, out)
|
||||
self.assertEqual(blocks, 0, out)
|
||||
|
||||
|
||||
class StdPrinterTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue