mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
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:
parent
b4b8f234d4
commit
f9d0b1256f
9 changed files with 123 additions and 22 deletions
|
@ -525,6 +525,15 @@ static size_t ntimes_arena_allocated = 0;
|
|||
/* High water mark (max value ever seen) for narenas_currently_allocated. */
|
||||
static size_t narenas_highwater = 0;
|
||||
|
||||
static Py_ssize_t _Py_AllocatedBlocks = 0;
|
||||
|
||||
Py_ssize_t
|
||||
_Py_GetAllocatedBlocks(void)
|
||||
{
|
||||
return _Py_AllocatedBlocks;
|
||||
}
|
||||
|
||||
|
||||
/* Allocate a new arena. If we run out of memory, return NULL. Else
|
||||
* allocate a new arena, and return the address of an arena_object
|
||||
* describing the new arena. It's expected that the caller will set
|
||||
|
@ -785,6 +794,8 @@ PyObject_Malloc(size_t nbytes)
|
|||
if (nbytes > PY_SSIZE_T_MAX)
|
||||
return NULL;
|
||||
|
||||
_Py_AllocatedBlocks++;
|
||||
|
||||
/*
|
||||
* This implicitly redirects malloc(0).
|
||||
*/
|
||||
|
@ -901,6 +912,7 @@ PyObject_Malloc(size_t nbytes)
|
|||
* and free list are already initialized.
|
||||
*/
|
||||
bp = pool->freeblock;
|
||||
assert(bp != NULL);
|
||||
pool->freeblock = *(block **)bp;
|
||||
UNLOCK();
|
||||
return (void *)bp;
|
||||
|
@ -958,7 +970,12 @@ redirect:
|
|||
*/
|
||||
if (nbytes == 0)
|
||||
nbytes = 1;
|
||||
return (void *)malloc(nbytes);
|
||||
{
|
||||
void *result = malloc(nbytes);
|
||||
if (!result)
|
||||
_Py_AllocatedBlocks--;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/* free */
|
||||
|
@ -978,6 +995,8 @@ PyObject_Free(void *p)
|
|||
if (p == NULL) /* free(NULL) has no effect */
|
||||
return;
|
||||
|
||||
_Py_AllocatedBlocks--;
|
||||
|
||||
#ifdef WITH_VALGRIND
|
||||
if (UNLIKELY(running_on_valgrind > 0))
|
||||
goto redirect;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue