bpo-40428: Remove PyTuple_ClearFreeList() function (GH-19769)

Remove the following function from the C API:

* PyAsyncGen_ClearFreeLists()
* PyContext_ClearFreeList()
* PyDict_ClearFreeList()
* PyFloat_ClearFreeList()
* PyFrame_ClearFreeList()
* PyList_ClearFreeList()
* PySet_ClearFreeList()
* PyTuple_ClearFreeList()

Make these functions private, move them to the internal C API and
change their return type to void.

Call explicitly PyGC_Collect() to free all free lists.

Note: PySet_ClearFreeList() did nothing.
This commit is contained in:
Victor Stinner 2020-04-29 02:29:20 +02:00 committed by GitHub
parent cc0dc7e484
commit ae00a5a885
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 71 additions and 86 deletions

View file

@ -1270,18 +1270,15 @@ get_token_missing(void)
///////////////////////////
int
PyContext_ClearFreeList(void)
void
_PyContext_ClearFreeList(void)
{
int size = ctx_freelist_len;
while (ctx_freelist_len) {
for (; ctx_freelist_len; ctx_freelist_len--) {
PyContext *ctx = ctx_freelist;
ctx_freelist = (PyContext *)ctx->ctx_weakreflist;
ctx->ctx_weakreflist = NULL;
PyObject_GC_Del(ctx);
ctx_freelist_len--;
}
return size;
}
@ -1289,8 +1286,8 @@ void
_PyContext_Fini(void)
{
Py_CLEAR(_token_missing);
(void)PyContext_ClearFreeList();
(void)_PyHamt_Fini();
_PyContext_ClearFreeList();
_PyHamt_Fini();
}