mirror of
https://github.com/python/cpython.git
synced 2025-10-19 07:53:46 +00:00
Merge branch 'main' of https://github.com/python/cpython
This commit is contained in:
commit
1ff6d69fbe
3 changed files with 10 additions and 12 deletions
|
@ -769,12 +769,6 @@ struct _is {
|
|||
* and should be placed at the beginning. */
|
||||
struct _ceval_state ceval;
|
||||
|
||||
/* This structure is carefully allocated so that it's correctly aligned
|
||||
* to avoid undefined behaviors during LOAD and STORE. The '_malloced'
|
||||
* field stores the allocated pointer address that will later be freed.
|
||||
*/
|
||||
void *_malloced;
|
||||
|
||||
PyInterpreterState *next;
|
||||
|
||||
int64_t id;
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Fix memory leak in sub-interpreter creation.
|
|
@ -457,16 +457,19 @@ _PyInterpreterState_Enable(_PyRuntimeState *runtime)
|
|||
static PyInterpreterState *
|
||||
alloc_interpreter(void)
|
||||
{
|
||||
// Aligned allocation for PyInterpreterState.
|
||||
// the first word of the memory block is used to store
|
||||
// the original pointer to be used later to free the memory.
|
||||
size_t alignment = _Alignof(PyInterpreterState);
|
||||
size_t allocsize = sizeof(PyInterpreterState) + alignment - 1;
|
||||
size_t allocsize = sizeof(PyInterpreterState) + sizeof(void *) + alignment - 1;
|
||||
void *mem = PyMem_RawCalloc(1, allocsize);
|
||||
if (mem == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
PyInterpreterState *interp = _Py_ALIGN_UP(mem, alignment);
|
||||
assert(_Py_IS_ALIGNED(interp, alignment));
|
||||
interp->_malloced = mem;
|
||||
return interp;
|
||||
void *ptr = _Py_ALIGN_UP((char *)mem + sizeof(void *), alignment);
|
||||
((void **)ptr)[-1] = mem;
|
||||
assert(_Py_IS_ALIGNED(ptr, alignment));
|
||||
return ptr;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -481,7 +484,7 @@ free_interpreter(PyInterpreterState *interp)
|
|||
interp->obmalloc = NULL;
|
||||
}
|
||||
assert(_Py_IS_ALIGNED(interp, _Alignof(PyInterpreterState)));
|
||||
PyMem_RawFree(interp->_malloced);
|
||||
PyMem_RawFree(((void **)interp)[-1]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue