@@ -1635,6 +1635,13 @@ get_async_gen_freelist(void)
16351635 struct _Py_object_freelists * freelists = _Py_object_freelists_GET ();
16361636 return & freelists -> async_gens ;
16371637}
1638+
1639+ static struct _Py_async_gen_asend_freelist *
1640+ get_async_gen_asend_freelist (void )
1641+ {
1642+ struct _Py_object_freelists * freelists = _Py_object_freelists_GET ();
1643+ return & freelists -> async_gen_asends ;
1644+ }
16381645#endif
16391646
16401647
@@ -1659,25 +1666,27 @@ void
16591666_PyAsyncGen_ClearFreeLists (struct _Py_object_freelists * freelist_state , int is_finalization )
16601667{
16611668#ifdef WITH_FREELISTS
1662- struct _Py_async_gen_freelist * state = & freelist_state -> async_gens ;
1669+ struct _Py_async_gen_freelist * freelist = & freelist_state -> async_gens ;
16631670
1664- while (state -> value_numfree > 0 ) {
1671+ while (freelist -> numfree > 0 ) {
16651672 _PyAsyncGenWrappedValue * o ;
1666- o = state -> value_freelist [-- state -> value_numfree ];
1673+ o = freelist -> items [-- freelist -> numfree ];
16671674 assert (_PyAsyncGenWrappedValue_CheckExact (o ));
16681675 PyObject_GC_Del (o );
16691676 }
16701677
1671- while (state -> asend_numfree > 0 ) {
1678+ struct _Py_async_gen_asend_freelist * asend_freelist = & freelist_state -> async_gen_asends ;
1679+
1680+ while (asend_freelist -> numfree > 0 ) {
16721681 PyAsyncGenASend * o ;
1673- o = state -> asend_freelist [-- state -> asend_numfree ];
1682+ o = asend_freelist -> items [-- asend_freelist -> numfree ];
16741683 assert (Py_IS_TYPE (o , & _PyAsyncGenASend_Type ));
16751684 PyObject_GC_Del (o );
16761685 }
16771686
16781687 if (is_finalization ) {
1679- state -> value_numfree = -1 ;
1680- state -> asend_numfree = -1 ;
1688+ freelist -> numfree = -1 ;
1689+ asend_freelist -> numfree = -1 ;
16811690 }
16821691#endif
16831692}
@@ -1726,11 +1735,11 @@ async_gen_asend_dealloc(PyAsyncGenASend *o)
17261735 Py_CLEAR (o -> ags_gen );
17271736 Py_CLEAR (o -> ags_sendval );
17281737#ifdef WITH_FREELISTS
1729- struct _Py_async_gen_freelist * async_gen_freelist = get_async_gen_freelist ();
1730- if (async_gen_freelist -> asend_numfree >= 0 && async_gen_freelist -> asend_numfree < _PyAsyncGen_MAXFREELIST ) {
1738+ struct _Py_async_gen_asend_freelist * freelist = get_async_gen_asend_freelist ();
1739+ if (freelist -> numfree >= 0 && freelist -> numfree < _PyAsyncGen_MAXFREELIST ) {
17311740 assert (PyAsyncGenASend_CheckExact (o ));
17321741 _PyGC_CLEAR_FINALIZED ((PyObject * )o );
1733- async_gen_freelist -> asend_freelist [ async_gen_freelist -> asend_numfree ++ ] = o ;
1742+ freelist -> items [ freelist -> numfree ++ ] = o ;
17341743 }
17351744 else
17361745#endif
@@ -1896,10 +1905,10 @@ async_gen_asend_new(PyAsyncGenObject *gen, PyObject *sendval)
18961905{
18971906 PyAsyncGenASend * o ;
18981907#ifdef WITH_FREELISTS
1899- struct _Py_async_gen_freelist * async_gen_freelist = get_async_gen_freelist ();
1900- if (async_gen_freelist -> asend_numfree > 0 ) {
1901- async_gen_freelist -> asend_numfree -- ;
1902- o = async_gen_freelist -> asend_freelist [ async_gen_freelist -> asend_numfree ];
1908+ struct _Py_async_gen_asend_freelist * freelist = get_async_gen_asend_freelist ();
1909+ if (freelist -> numfree > 0 ) {
1910+ freelist -> numfree -- ;
1911+ o = freelist -> items [ freelist -> numfree ];
19031912 _Py_NewReference ((PyObject * )o );
19041913 }
19051914 else
@@ -1931,10 +1940,10 @@ async_gen_wrapped_val_dealloc(_PyAsyncGenWrappedValue *o)
19311940 _PyObject_GC_UNTRACK ((PyObject * )o );
19321941 Py_CLEAR (o -> agw_val );
19331942#ifdef WITH_FREELISTS
1934- struct _Py_async_gen_freelist * async_gen_freelist = get_async_gen_freelist ();
1935- if (async_gen_freelist -> value_numfree >= 0 && async_gen_freelist -> value_numfree < _PyAsyncGen_MAXFREELIST ) {
1943+ struct _Py_async_gen_freelist * freelist = get_async_gen_freelist ();
1944+ if (freelist -> items >= 0 && freelist -> numfree < _PyAsyncGen_MAXFREELIST ) {
19361945 assert (_PyAsyncGenWrappedValue_CheckExact (o ));
1937- async_gen_freelist -> value_freelist [ async_gen_freelist -> value_numfree ++ ] = o ;
1946+ freelist -> items [ freelist -> numfree ++ ] = o ;
19381947 OBJECT_STAT_INC (to_freelist );
19391948 }
19401949 else
@@ -2004,10 +2013,10 @@ _PyAsyncGenValueWrapperNew(PyThreadState *tstate, PyObject *val)
20042013 assert (val );
20052014
20062015#ifdef WITH_FREELISTS
2007- struct _Py_async_gen_freelist * async_gen_freelist = get_async_gen_freelist ();
2008- if (async_gen_freelist -> value_numfree > 0 ) {
2009- async_gen_freelist -> value_numfree -- ;
2010- o = async_gen_freelist -> value_freelist [ async_gen_freelist -> value_numfree ];
2016+ struct _Py_async_gen_freelist * freelist = get_async_gen_freelist ();
2017+ if (freelist -> numfree > 0 ) {
2018+ freelist -> numfree -- ;
2019+ o = freelist -> items [ freelist -> numfree ];
20112020 OBJECT_STAT_INC (from_freelist );
20122021 assert (_PyAsyncGenWrappedValue_CheckExact (o ));
20132022 _Py_NewReference ((PyObject * )o );
0 commit comments