bpo-40521: Make tuple free list per-interpreter (GH-20247)

Each interpreter now has its own tuple free lists:

* Move tuple numfree and free_list arrays into PyInterpreterState.
* Define PyTuple_MAXSAVESIZE and PyTuple_MAXFREELIST macros in
  pycore_interp.h.
* Add _Py_tuple_state structure. Pass it explicitly to tuple_alloc().
* Add tstate parameter to _PyTuple_ClearFreeList()
* Each interpreter now has its own empty tuple singleton.
This commit is contained in:
Victor Stinner 2020-06-04 23:38:36 +02:00 committed by GitHub
parent dc24b8a2ac
commit 69ac6e58fd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 82 additions and 62 deletions

View file

@ -1025,8 +1025,9 @@ delete_garbage(PyThreadState *tstate, GCState *gcstate,
static void
clear_freelists(void)
{
PyThreadState *tstate = _PyThreadState_GET();
_PyFrame_ClearFreeList();
_PyTuple_ClearFreeList();
_PyTuple_ClearFreeList(tstate);
_PyFloat_ClearFreeList();
_PyList_ClearFreeList();
_PyDict_ClearFreeList();