@@ -276,25 +276,33 @@ get_dict_freelist(void)
276276    struct  _Py_object_freelists  * freelists  =  _Py_object_freelists_GET ();
277277    return  & freelists -> dicts ;
278278}
279+ 
280+ static  struct  _Py_dictkeys_freelist  * 
281+ get_dictkeys_freelist (void )
282+ {
283+     struct  _Py_object_freelists  * freelists  =  _Py_object_freelists_GET ();
284+     return  & freelists -> dictkeys ;
285+ }
279286#endif 
280287
281288
282289void 
283290_PyDict_ClearFreeList (struct  _Py_object_freelists  * freelists , int  is_finalization )
284291{
285292#ifdef  WITH_FREELISTS 
286-     struct  _Py_dict_freelist  * state  =  & freelists -> dicts ;
287-     while  (state -> numfree  >  0 ) {
288-         PyDictObject  * op  =  state -> free_list [-- state -> numfree ];
293+     struct  _Py_dict_freelist  * freelist  =  & freelists -> dicts ;
294+     while  (freelist -> numfree  >  0 ) {
295+         PyDictObject  * op  =  freelist -> items [-- freelist -> numfree ];
289296        assert (PyDict_CheckExact (op ));
290297        PyObject_GC_Del (op );
291298    }
292-     while  (state -> keys_numfree  >  0 ) {
293-         PyMem_Free (state -> keys_free_list [-- state -> keys_numfree ]);
299+     struct  _Py_dictkeys_freelist  * keys_freelist  =  & freelists -> dictkeys ;
300+     while  (keys_freelist -> numfree  >  0 ) {
301+         PyMem_Free (keys_freelist -> items [-- keys_freelist -> numfree ]);
294302    }
295303    if  (is_finalization ) {
296-         state -> numfree  =  -1 ;
297-         state -> keys_numfree  =  -1 ;
304+         freelist -> numfree  =  -1 ;
305+         keys_freelist -> numfree  =  -1 ;
298306    }
299307#endif 
300308}
@@ -314,6 +322,9 @@ _PyDict_DebugMallocStats(FILE *out)
314322    struct  _Py_dict_freelist  * dict_freelist  =  get_dict_freelist ();
315323    _PyDebugAllocatorStats (out , "free PyDictObject" ,
316324                           dict_freelist -> numfree , sizeof (PyDictObject ));
325+     struct  _Py_dictkeys_freelist  * dictkeys_freelist  =  get_dictkeys_freelist ();
326+     _PyDebugAllocatorStats (out , "free PyDictKeysObject" ,
327+                            dictkeys_freelist -> numfree , sizeof (PyDictKeysObject ));
317328#endif 
318329}
319330
@@ -663,9 +674,9 @@ new_keys_object(PyInterpreterState *interp, uint8_t log2_size, bool unicode)
663674    }
664675
665676#ifdef  WITH_FREELISTS 
666-     struct  _Py_dict_freelist   * dict_freelist  =  get_dict_freelist ();
667-     if  (log2_size  ==  PyDict_LOG_MINSIZE  &&  unicode  &&  dict_freelist -> keys_numfree  >  0 ) {
668-         dk  =  dict_freelist -> keys_free_list [-- dict_freelist -> keys_numfree ];
677+     struct  _Py_dictkeys_freelist   * freelist  =  get_dictkeys_freelist ();
678+     if  (log2_size  ==  PyDict_LOG_MINSIZE  &&  unicode  &&  freelist -> numfree  >  0 ) {
679+         dk  =  freelist -> items [-- freelist -> numfree ];
669680        OBJECT_STAT_INC (from_freelist );
670681    }
671682    else 
@@ -698,12 +709,12 @@ static void
698709free_keys_object (PyDictKeysObject  * keys )
699710{
700711#ifdef  WITH_FREELISTS 
701-     struct  _Py_dict_freelist   * dict_freelist  =  get_dict_freelist ();
712+     struct  _Py_dictkeys_freelist   * freelist  =  get_dictkeys_freelist ();
702713    if  (DK_LOG_SIZE (keys ) ==  PyDict_LOG_MINSIZE 
703-             &&  dict_freelist -> keys_numfree  <  PyDict_MAXFREELIST 
704-             &&  dict_freelist -> keys_numfree  >= 0 
714+             &&  freelist -> numfree  <  PyDict_MAXFREELIST 
715+             &&  freelist -> numfree  >= 0 
705716            &&  DK_IS_UNICODE (keys )) {
706-         dict_freelist -> keys_free_list [ dict_freelist -> keys_numfree ++ ] =  keys ;
717+         freelist -> items [ freelist -> numfree ++ ] =  keys ;
707718        OBJECT_STAT_INC (to_freelist );
708719        return ;
709720    }
@@ -743,9 +754,9 @@ new_dict(PyInterpreterState *interp,
743754    PyDictObject  * mp ;
744755    assert (keys  !=  NULL );
745756#ifdef  WITH_FREELISTS 
746-     struct  _Py_dict_freelist  * dict_freelist  =  get_dict_freelist ();
747-     if  (dict_freelist -> numfree  >  0 ) {
748-         mp  =  dict_freelist -> free_list [-- dict_freelist -> numfree ];
757+     struct  _Py_dict_freelist  * freelist  =  get_dict_freelist ();
758+     if  (freelist -> numfree  >  0 ) {
759+         mp  =  freelist -> items [-- freelist -> numfree ];
749760        assert  (mp  !=  NULL );
750761        assert  (Py_IS_TYPE (mp , & PyDict_Type ));
751762        OBJECT_STAT_INC (from_freelist );
@@ -2593,10 +2604,10 @@ dict_dealloc(PyObject *self)
25932604        dictkeys_decref (interp , keys );
25942605    }
25952606#ifdef  WITH_FREELISTS 
2596-     struct  _Py_dict_freelist  * dict_freelist  =  get_dict_freelist ();
2597-     if  (dict_freelist -> numfree  <  PyDict_MAXFREELIST  &&  dict_freelist -> numfree  >=0  && 
2607+     struct  _Py_dict_freelist  * freelist  =  get_dict_freelist ();
2608+     if  (freelist -> numfree  <  PyDict_MAXFREELIST  &&  freelist -> numfree  >=0  && 
25982609        Py_IS_TYPE (mp , & PyDict_Type )) {
2599-         dict_freelist -> free_list [ dict_freelist -> numfree ++ ] =  mp ;
2610+         freelist -> items [ freelist -> numfree ++ ] =  mp ;
26002611        OBJECT_STAT_INC (to_freelist );
26012612    }
26022613    else 
0 commit comments