mirror of
https://github.com/python/cpython.git
synced 2025-12-05 00:52:25 +00:00
bpo-1635741: test_embed cheks that Python does not leak (GH-31555)
This commit is contained in:
parent
38f331d465
commit
c9c178fdb1
2 changed files with 22 additions and 1 deletions
|
|
@ -118,7 +118,7 @@ class CmdLineTest(unittest.TestCase):
|
||||||
self.assertEqual(out.rstrip(), b'{}')
|
self.assertEqual(out.rstrip(), b'{}')
|
||||||
self.assertEqual(err, b'')
|
self.assertEqual(err, b'')
|
||||||
# "-X showrefcount" shows the refcount, but only in debug builds
|
# "-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}")
|
self.assertEqual(out.rstrip(), b"{'showrefcount': True}")
|
||||||
if Py_DEBUG:
|
if Py_DEBUG:
|
||||||
# bpo-46417: Tolerate negative reference count which can occur
|
# bpo-46417: Tolerate negative reference count which can occur
|
||||||
|
|
|
||||||
|
|
@ -1641,6 +1641,27 @@ class MiscTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||||
""").lstrip()
|
""").lstrip()
|
||||||
self.assertEqual(out, expected)
|
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):
|
class StdPrinterTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||||
# Test PyStdPrinter_Type which is used by _PySys_SetPreliminaryStderr():
|
# Test PyStdPrinter_Type which is used by _PySys_SetPreliminaryStderr():
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue