Issue #13390: New function :func:sys.getallocatedblocks() returns the number of memory blocks currently allocated.

Also, the ``-R`` option to regrtest uses this function to guard against memory allocation leaks.
This commit is contained in:
Antoine Pitrou 2012-12-09 14:28:26 +01:00
parent b4b8f234d4
commit f9d0b1256f
9 changed files with 123 additions and 22 deletions

View file

@ -6,6 +6,7 @@ import textwrap
import warnings
import operator
import codecs
import gc
# count the number of test runs, used to create unique
# strings to intern in test_intern()
@ -611,6 +612,29 @@ class SysModuleTest(unittest.TestCase):
ret, out, err = assert_python_ok(*args)
self.assertIn(b"free PyDictObjects", err)
@unittest.skipUnless(hasattr(sys, "getallocatedblocks"),
"sys.getallocatedblocks unavailable on this build")
def test_getallocatedblocks(self):
# Some sanity checks
a = sys.getallocatedblocks()
self.assertIs(type(a), int)
self.assertGreater(a, 0)
try:
# While we could imagine a Python session where the number of
# multiple buffer objects would exceed the sharing of references,
# it is unlikely to happen in a normal test run.
self.assertLess(a, sys.gettotalrefcount())
except AttributeError:
# gettotalrefcount() not available
pass
gc.collect()
b = sys.getallocatedblocks()
self.assertLessEqual(b, a)
gc.collect()
c = sys.getallocatedblocks()
self.assertIn(c, range(b - 50, b + 50))
class SizeofTest(unittest.TestCase):
def setUp(self):