]> granicus.if.org Git - python/commitdiff
_PyObject_DebugDumpStats: renamed to _PyObject_DebugMallocStats.
authorTim Peters <tim.peters@gmail.com>
Sat, 13 Apr 2002 08:29:14 +0000 (08:29 +0000)
committerTim Peters <tim.peters@gmail.com>
Sat, 13 Apr 2002 08:29:14 +0000 (08:29 +0000)
Added code to call this when PYMALLOC_DEBUG is enabled, and envar
PYTHONMALLOCSTATS is set, whenever a new arena is obtained and once
late in the Python shutdown process.

Include/objimpl.h
Objects/obmalloc.c
Python/pythonrun.c

index ed7042f2ed79123535d7a5808ba99a7bea57ec4a..3f72d67c43a83eda88c28511c04b3418c0ca14b2 100644 (file)
@@ -97,7 +97,7 @@ DL_IMPORT(void *) _PyObject_DebugRealloc(void *p, size_t nbytes);
 DL_IMPORT(void) _PyObject_DebugFree(void *p);
 DL_IMPORT(void) _PyObject_DebugDumpAddress(const void *p);
 DL_IMPORT(void) _PyObject_DebugCheckAddress(const void *p);
-DL_IMPORT(void) _PyObject_DebugDumpStats(void);
+DL_IMPORT(void) _PyObject_DebugMallocStats(void);
 #define PyObject_MALLOC                _PyObject_DebugMalloc
 #define PyObject_Malloc                _PyObject_DebugMalloc
 #define PyObject_REALLOC       _PyObject_DebugRealloc
index 13711412107f006aa136277a3e9edc0e7eb0695a..aef6b9f8463412d50d6b6d0adae3ea884f558449 100644 (file)
@@ -448,6 +448,11 @@ new_arena(void)
        if (bp == NULL)
                return NULL;
 
+#ifdef PYMALLOC_DEBUG
+       if (Py_GETENV("PYTHONMALLOCSTATS"))
+               _PyObject_DebugMallocStats();
+#endif
+
        /* arenabase <- first pool-aligned address in the arena
           nfreepools <- number of whole pools that fit after alignment */
        arenabase = bp;
@@ -1216,7 +1221,7 @@ printone(const char* msg, ulong value)
 
 /* Print summary info to stderr about the state of pymalloc's structures. */
 void
-_PyObject_DebugDumpStats(void)
+_PyObject_DebugMallocStats(void)
 {
        uint i;
        const uint numclasses = SMALL_REQUEST_THRESHOLD >> ALIGNMENT_SHIFT;
@@ -1245,8 +1250,6 @@ _PyObject_DebugDumpStats(void)
 
        fprintf(stderr, "Small block threshold = %d, in %u size classes.\n",
                SMALL_REQUEST_THRESHOLD, numclasses);
-       fprintf(stderr, "pymalloc malloc+realloc called %lu times.\n",
-               serialno);
 
        for (i = 0; i < numclasses; ++i)
                numpools[i] = numblocks[i] = numfreeblocks[i] = 0;
@@ -1312,6 +1315,7 @@ _PyObject_DebugDumpStats(void)
                quantization += p * ((POOL_SIZE - POOL_OVERHEAD) % size);
        }
        fputc('\n', stderr);
+       (void)printone("# times object malloc called", serialno);
 
        PyOS_snprintf(buf, sizeof(buf),
                "%u arenas * %d bytes/arena", narenas, ARENA_SIZE);
@@ -1320,12 +1324,12 @@ _PyObject_DebugDumpStats(void)
        fputc('\n', stderr);
 
        total = printone("# bytes in allocated blocks", allocated_bytes);
+       total += printone("# bytes in available blocks", available_bytes);
 
        PyOS_snprintf(buf, sizeof(buf),
                "%u unused pools * %d bytes", numfreepools, POOL_SIZE);
        total += printone(buf, (ulong)numfreepools * POOL_SIZE);
 
-       total += printone("# bytes in available blocks", available_bytes);
        total += printone("# bytes lost to pool headers", pool_header_bytes);
        total += printone("# bytes lost to quantization", quantization);
        total += printone("# bytes lost to arena alignment", arena_alignment);
index f0727d3f5b37797a20ad3607fa8b193f7cf8bb0a..0ca1f42c6c24ff83dee0755fd394cd500d3fed18 100644 (file)
@@ -276,6 +276,11 @@ Py_Finalize(void)
 
        PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
 
+#ifdef PYMALLOC_DEBUG
+       if (Py_GETENV("PYTHONMALLOCSTATS"))
+               _PyObject_DebugMallocStats();
+#endif
+
        call_ll_exitfuncs();
 
 #ifdef Py_TRACE_REFS