diff options
author | Inada Naoki <songofacandy@gmail.com> | 2019-07-26 06:05:50 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-26 06:05:50 (GMT) |
commit | 3e54b575313c64f541e98216ed079fafed01ff5d (patch) | |
tree | 747f171a2d8d726cc97580c85ded8891a2bc41ae /Objects/methodobject.c | |
parent | 76b645124b3aaa34bc664eece43707c01ef1b382 (diff) | |
download | cpython-3e54b575313c64f541e98216ed079fafed01ff5d.zip cpython-3e54b575313c64f541e98216ed079fafed01ff5d.tar.gz cpython-3e54b575313c64f541e98216ed079fafed01ff5d.tar.bz2 |
bpo-37340: remove free_list for bound method objects (GH-14232)
Diffstat (limited to 'Objects/methodobject.c')
-rw-r--r-- | Objects/methodobject.c | 53 |
1 files changed, 6 insertions, 47 deletions
diff --git a/Objects/methodobject.c b/Objects/methodobject.c index 3494f11..b997746 100644 --- a/Objects/methodobject.c +++ b/Objects/methodobject.c @@ -7,15 +7,6 @@ #include "pycore_pystate.h" #include "structmember.h" -/* Free list for method objects to safe malloc/free overhead - * The m_self element is used to chain the objects. - */ -static PyCFunctionObject *free_list = NULL; -static int numfree = 0; -#ifndef PyCFunction_MAXFREELIST -#define PyCFunction_MAXFREELIST 256 -#endif - /* undefine macro trampoline to PyCFunction_NewEx */ #undef PyCFunction_New @@ -66,17 +57,10 @@ PyCFunction_NewEx(PyMethodDef *ml, PyObject *self, PyObject *module) return NULL; } - PyCFunctionObject *op; - op = free_list; - if (op != NULL) { - free_list = (PyCFunctionObject *)(op->m_self); - (void)PyObject_INIT(op, &PyCFunction_Type); - numfree--; - } - else { - op = PyObject_GC_New(PyCFunctionObject, &PyCFunction_Type); - if (op == NULL) - return NULL; + PyCFunctionObject *op = + PyObject_GC_New(PyCFunctionObject, &PyCFunction_Type); + if (op == NULL) { + return NULL; } op->m_weakreflist = NULL; op->m_ml = ml; @@ -130,14 +114,7 @@ meth_dealloc(PyCFunctionObject *m) } Py_XDECREF(m->m_self); Py_XDECREF(m->m_module); - if (numfree < PyCFunction_MAXFREELIST) { - m->m_self = (PyObject *)free_list; - free_list = m; - numfree++; - } - else { - PyObject_GC_Del(m); - } + PyObject_GC_Del(m); } static PyObject * @@ -338,16 +315,7 @@ PyTypeObject PyCFunction_Type = { int PyCFunction_ClearFreeList(void) { - int freelist_size = numfree; - - while (free_list) { - PyCFunctionObject *v = free_list; - free_list = (PyCFunctionObject *)(v->m_self); - PyObject_GC_Del(v); - numfree--; - } - assert(numfree == 0); - return freelist_size; + return 0; } void @@ -356,15 +324,6 @@ PyCFunction_Fini(void) (void)PyCFunction_ClearFreeList(); } -/* Print summary info about the state of the optimized allocator */ -void -_PyCFunction_DebugMallocStats(FILE *out) -{ - _PyDebugAllocatorStats(out, - "free PyCFunctionObject", - numfree, sizeof(PyCFunctionObject)); -} - /* Vectorcall functions for each of the PyCFunction calling conventions, * except for METH_VARARGS (possibly combined with METH_KEYWORDS) which |