summaryrefslogtreecommitdiffstats
path: root/Objects/genobject.c
diff options
context:
space:
mode:
Diffstat (limited to 'Objects/genobject.c')
-rw-r--r--Objects/genobject.c108
1 files changed, 12 insertions, 96 deletions
diff --git a/Objects/genobject.c b/Objects/genobject.c
index 37b4053..c204ac0 100644
--- a/Objects/genobject.c
+++ b/Objects/genobject.c
@@ -6,7 +6,7 @@
#include "pycore_call.h" // _PyObject_CallNoArgs()
#include "pycore_ceval.h" // _PyEval_EvalFrame()
#include "pycore_frame.h" // _PyInterpreterFrame
-#include "pycore_freelist.h" // struct _Py_async_gen_freelist
+#include "pycore_freelist.h" // _Py_FREELIST_FREE(), _Py_FREELIST_POP()
#include "pycore_gc.h" // _PyGC_CLEAR_FINALIZED()
#include "pycore_modsupport.h" // _PyArg_CheckPositional()
#include "pycore_object.h" // _PyObject_GC_UNTRACK()
@@ -1629,23 +1629,6 @@ PyTypeObject PyAsyncGen_Type = {
};
-#ifdef WITH_FREELISTS
-static struct _Py_async_gen_freelist *
-get_async_gen_freelist(void)
-{
- struct _Py_object_freelists *freelists = _Py_object_freelists_GET();
- return &freelists->async_gens;
-}
-
-static struct _Py_async_gen_asend_freelist *
-get_async_gen_asend_freelist(void)
-{
- struct _Py_object_freelists *freelists = _Py_object_freelists_GET();
- return &freelists->async_gen_asends;
-}
-#endif
-
-
PyObject *
PyAsyncGen_New(PyFrameObject *f, PyObject *name, PyObject *qualname)
{
@@ -1662,36 +1645,6 @@ PyAsyncGen_New(PyFrameObject *f, PyObject *name, PyObject *qualname)
return (PyObject*)o;
}
-
-void
-_PyAsyncGen_ClearFreeLists(struct _Py_object_freelists *freelist_state, int is_finalization)
-{
-#ifdef WITH_FREELISTS
- struct _Py_async_gen_freelist *freelist = &freelist_state->async_gens;
-
- while (freelist->numfree > 0) {
- _PyAsyncGenWrappedValue *o;
- o = freelist->items[--freelist->numfree];
- assert(_PyAsyncGenWrappedValue_CheckExact(o));
- PyObject_GC_Del(o);
- }
-
- struct _Py_async_gen_asend_freelist *asend_freelist = &freelist_state->async_gen_asends;
-
- while (asend_freelist->numfree > 0) {
- PyAsyncGenASend *o;
- o = asend_freelist->items[--asend_freelist->numfree];
- assert(Py_IS_TYPE(o, &_PyAsyncGenASend_Type));
- PyObject_GC_Del(o);
- }
-
- if (is_finalization) {
- freelist->numfree = -1;
- asend_freelist->numfree = -1;
- }
-#endif
-}
-
static PyObject *
async_gen_unwrap_value(PyAsyncGenObject *gen, PyObject *result)
{
@@ -1735,18 +1688,11 @@ async_gen_asend_dealloc(PyAsyncGenASend *o)
_PyObject_GC_UNTRACK((PyObject *)o);
Py_CLEAR(o->ags_gen);
Py_CLEAR(o->ags_sendval);
-#ifdef WITH_FREELISTS
- struct _Py_async_gen_asend_freelist *freelist = get_async_gen_asend_freelist();
- if (freelist->numfree >= 0 && freelist->numfree < _PyAsyncGen_MAXFREELIST) {
- assert(PyAsyncGenASend_CheckExact(o));
- _PyGC_CLEAR_FINALIZED((PyObject *)o);
- freelist->items[freelist->numfree++] = o;
- }
- else
-#endif
- {
- PyObject_GC_Del(o);
- }
+
+ assert(PyAsyncGenASend_CheckExact(o));
+ _PyGC_CLEAR_FINALIZED((PyObject *)o);
+
+ _Py_FREELIST_FREE(async_gen_asends, o, PyObject_GC_Del);
}
static int
@@ -1936,17 +1882,8 @@ PyTypeObject _PyAsyncGenASend_Type = {
static PyObject *
async_gen_asend_new(PyAsyncGenObject *gen, PyObject *sendval)
{
- PyAsyncGenASend *o;
-#ifdef WITH_FREELISTS
- struct _Py_async_gen_asend_freelist *freelist = get_async_gen_asend_freelist();
- if (freelist->numfree > 0) {
- freelist->numfree--;
- o = freelist->items[freelist->numfree];
- _Py_NewReference((PyObject *)o);
- }
- else
-#endif
- {
+ PyAsyncGenASend *o = _Py_FREELIST_POP(PyAsyncGenASend, async_gen_asends);
+ if (o == NULL) {
o = PyObject_GC_New(PyAsyncGenASend, &_PyAsyncGenASend_Type);
if (o == NULL) {
return NULL;
@@ -1972,18 +1909,7 @@ async_gen_wrapped_val_dealloc(_PyAsyncGenWrappedValue *o)
{
_PyObject_GC_UNTRACK((PyObject *)o);
Py_CLEAR(o->agw_val);
-#ifdef WITH_FREELISTS
- struct _Py_async_gen_freelist *freelist = get_async_gen_freelist();
- if (freelist->numfree >= 0 && freelist->numfree < _PyAsyncGen_MAXFREELIST) {
- assert(_PyAsyncGenWrappedValue_CheckExact(o));
- freelist->items[freelist->numfree++] = o;
- OBJECT_STAT_INC(to_freelist);
- }
- else
-#endif
- {
- PyObject_GC_Del(o);
- }
+ _Py_FREELIST_FREE(async_gens, o, PyObject_GC_Del);
}
@@ -2042,27 +1968,17 @@ PyTypeObject _PyAsyncGenWrappedValue_Type = {
PyObject *
_PyAsyncGenValueWrapperNew(PyThreadState *tstate, PyObject *val)
{
- _PyAsyncGenWrappedValue *o;
assert(val);
-#ifdef WITH_FREELISTS
- struct _Py_async_gen_freelist *freelist = get_async_gen_freelist();
- if (freelist->numfree > 0) {
- freelist->numfree--;
- o = freelist->items[freelist->numfree];
- OBJECT_STAT_INC(from_freelist);
- assert(_PyAsyncGenWrappedValue_CheckExact(o));
- _Py_NewReference((PyObject*)o);
- }
- else
-#endif
- {
+ _PyAsyncGenWrappedValue *o = _Py_FREELIST_POP(_PyAsyncGenWrappedValue, async_gens);
+ if (o == NULL) {
o = PyObject_GC_New(_PyAsyncGenWrappedValue,
&_PyAsyncGenWrappedValue_Type);
if (o == NULL) {
return NULL;
}
}
+ assert(_PyAsyncGenWrappedValue_CheckExact(o));
o->agw_val = Py_NewRef(val);
_PyObject_GC_TRACK((PyObject*)o);
return (PyObject*)o;