Skip to content

Commit

Permalink
bpo-1635741: test_embed cheks that Python does not leak (GH-31555)
Browse files Browse the repository at this point in the history
  • Loading branch information
vstinner committed Feb 24, 2022
1 parent 38f331d commit c9c178f
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Lib/test/test_cmd_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ def run_python(*args):
self.assertEqual(out.rstrip(), b'{}')
self.assertEqual(err, b'')
# "-X showrefcount" shows the refcount, but only in debug builds
rc, out, err = run_python('-X', 'showrefcount', '-c', code)
rc, out, err = run_python('-I', '-X', 'showrefcount', '-c', code)
self.assertEqual(out.rstrip(), b"{'showrefcount': True}")
if Py_DEBUG:
# bpo-46417: Tolerate negative reference count which can occur
Expand Down
21 changes: 21 additions & 0 deletions Lib/test/test_embed.py
Original file line number Diff line number Diff line change
Expand Up @@ -1641,6 +1641,27 @@ def test_frozenmain(self):
""").lstrip()
self.assertEqual(out, expected)

@unittest.skipUnless(hasattr(sys, 'gettotalrefcount'),
'-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))
# bpo-46417: Tolerate negative reference count which can occur because
# of bugs in C extensions. It is only wrong if it's greater than 0.
self.assertLessEqual(refs, 0, out)
self.assertEqual(blocks, 0, out)


class StdPrinterTests(EmbeddingTestsMixin, unittest.TestCase):
# Test PyStdPrinter_Type which is used by _PySys_SetPreliminaryStderr():
Expand Down

0 comments on commit c9c178f

Please sign in to comment.