[2.7] bpo-31692: Add PYTHONSHOWALLOCCOUNT env var (GH-3927)
bpo-31692, bpo-19527: * Add a new PYTHONSHOWALLOCCOUNT environment variable, similar to the Python 3 "-X showalloccount" option * When Python is compiled with COUNT_ALLOCS, the new PYTHONSHOWALLOCCOUNT environment variable now has to be set to dump allocation counts into stderr on shutdown. Moreover, allocations statistics are now dumped into stderr rather than stdout. * Add @test.support.requires_type_collecting decorator: skip test if COUNT_ALLOCS is defined * Fix tests for COUNT_ALLOCS: decorate some methods with @requires_type_collecting * test_sys.test_objecttypes(): update object type when COUNT_ALLOCS is defined
This commit is contained in:
parent
3c082a7fdb
commit
7b4ba62e38
|
@ -1101,7 +1101,7 @@ The next fields, up to and including :c:member:`~PyTypeObject.tp_weaklist`, only
|
|||
The remaining fields are only defined if the feature test macro
|
||||
:const:`COUNT_ALLOCS` is defined, and are for internal use only. They are
|
||||
documented here for completeness. None of these fields are inherited by
|
||||
subtypes.
|
||||
subtypes. See the :envvar:`PYTHONSHOWALLOCCOUNT` environment variable.
|
||||
|
||||
|
||||
.. c:member:: Py_ssize_t PyTypeObject.tp_allocs
|
||||
|
|
|
@ -664,6 +664,13 @@ if Python was configured with the ``--with-pydebug`` build option.
|
|||
If set, Python will print memory allocation statistics every time a new
|
||||
object arena is created, and on shutdown.
|
||||
|
||||
.. envvar:: PYTHONSHOWALLOCCOUNT
|
||||
|
||||
If set and Python was compiled with ``COUNT_ALLOCS`` defined, Python will
|
||||
dump allocations counts into stderr on shutdown.
|
||||
|
||||
.. versionadded:: 2.7.15
|
||||
|
||||
.. envvar:: PYTHONSHOWREFCOUNT
|
||||
|
||||
If set, Python will print the total reference count when the program
|
||||
|
|
|
@ -1795,6 +1795,9 @@ def py3k_bytes(b):
|
|||
except TypeError:
|
||||
return bytes(b)
|
||||
|
||||
requires_type_collecting = unittest.skipIf(hasattr(sys, 'getcounts'),
|
||||
'types are immortal if COUNT_ALLOCS is defined')
|
||||
|
||||
def args_from_interpreter_flags():
|
||||
"""Return a list of command-line arguments reproducing the current
|
||||
settings in sys.flags."""
|
||||
|
|
|
@ -208,6 +208,7 @@ class TestABC(unittest.TestCase):
|
|||
C()
|
||||
self.assertEqual(B.counter, 1)
|
||||
|
||||
@test_support.requires_type_collecting
|
||||
def test_cache_leak(self):
|
||||
# See issue #2521.
|
||||
class A(object):
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import unittest
|
||||
from test.test_support import verbose, run_unittest, start_threads
|
||||
from test.support import (verbose, run_unittest, start_threads,
|
||||
requires_type_collecting)
|
||||
import sys
|
||||
import time
|
||||
import gc
|
||||
|
@ -90,6 +91,7 @@ class GCTests(unittest.TestCase):
|
|||
del a
|
||||
self.assertNotEqual(gc.collect(), 0)
|
||||
|
||||
@requires_type_collecting
|
||||
def test_newinstance(self):
|
||||
class A(object):
|
||||
pass
|
||||
|
|
|
@ -493,6 +493,7 @@ class ArgsTestCase(BaseTestCase):
|
|||
self.assertIn(line2, reflog)
|
||||
|
||||
@unittest.skipUnless(Py_DEBUG, 'need a debug build')
|
||||
@support.requires_type_collecting
|
||||
def test_huntrleaks(self):
|
||||
# test --huntrleaks
|
||||
code = textwrap.dedent("""
|
||||
|
|
|
@ -748,7 +748,10 @@ class SizeofTest(unittest.TestCase):
|
|||
# tupleiterator
|
||||
check(iter(()), size('lP'))
|
||||
# type
|
||||
s = vsize('P2P15Pl4PP9PP11PI' # PyTypeObject
|
||||
fmt = 'P2P15Pl4PP9PP11PI'
|
||||
if hasattr(sys, 'getcounts'):
|
||||
fmt += '3P2P'
|
||||
s = vsize(fmt + # PyTypeObject
|
||||
'39P' # PyNumberMethods
|
||||
'3P' # PyMappingMethods
|
||||
'10P' # PySequenceMethods
|
||||
|
|
|
@ -601,6 +601,7 @@ class ReferencesTestCase(TestBase):
|
|||
del c1, c2, C, D
|
||||
gc.collect()
|
||||
|
||||
@test_support.requires_type_collecting
|
||||
def test_callback_in_cycle_resurrection(self):
|
||||
import gc
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
Add a new PYTHONSHOWALLOCCOUNT environment variable. When Python is compiled
|
||||
with COUNT_ALLOCS, PYTHONSHOWALLOCCOUNT now has to be set to dump allocation
|
||||
counts into stderr on shutdown. Moreover, allocations statistics are now dumped
|
||||
into stderr rather than stdout.
|
|
@ -488,7 +488,9 @@ Py_Finalize(void)
|
|||
|
||||
/* Debugging stuff */
|
||||
#ifdef COUNT_ALLOCS
|
||||
dump_counts(stdout);
|
||||
if (Py_GETENV("PYTHONSHOWALLOCCOUNT")) {
|
||||
dump_counts(stderr);
|
||||
}
|
||||
#endif
|
||||
|
||||
_PyDebug_PrintTotalRefs();
|
||||
|
|
Loading…
Reference in New Issue