mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
bpo-40521: Make context free list per-interpreter (GH-20644)
Each interpreter now has its own context free list: * Move context free list into PyInterpreterState. * Add _Py_context_state structure. * Add tstate parameter to _PyContext_ClearFreeList() and _PyContext_Fini(). * Pass tstate to clear_freelists().
This commit is contained in:
parent
78a02c2568
commit
e005ead49b
7 changed files with 34 additions and 28 deletions
|
@ -1023,16 +1023,15 @@ delete_garbage(PyThreadState *tstate, GCState *gcstate,
|
|||
* Clearing the free lists may give back memory to the OS earlier.
|
||||
*/
|
||||
static void
|
||||
clear_freelists(void)
|
||||
clear_freelists(PyThreadState *tstate)
|
||||
{
|
||||
PyThreadState *tstate = _PyThreadState_GET();
|
||||
_PyFrame_ClearFreeList(tstate);
|
||||
_PyTuple_ClearFreeList(tstate);
|
||||
_PyFloat_ClearFreeList(tstate);
|
||||
_PyList_ClearFreeList(tstate);
|
||||
_PyDict_ClearFreeList();
|
||||
_PyAsyncGen_ClearFreeLists(tstate);
|
||||
_PyContext_ClearFreeList();
|
||||
_PyContext_ClearFreeList(tstate);
|
||||
}
|
||||
|
||||
// Show stats for objects in each generations
|
||||
|
@ -1306,7 +1305,7 @@ collect(PyThreadState *tstate, int generation,
|
|||
/* Clear free list only during the collection of the highest
|
||||
* generation */
|
||||
if (generation == NUM_GENERATIONS-1) {
|
||||
clear_freelists();
|
||||
clear_freelists(tstate);
|
||||
}
|
||||
|
||||
if (_PyErr_Occurred(tstate)) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue