@@ -233,14 +233,12 @@ get_type_cache(void)
233233
234234
235235static void
236- type_cache_clear (struct type_cache * cache )
236+ type_cache_clear (struct type_cache * cache , PyObject * value )
237237{
238238 for (Py_ssize_t i = 0 ; i < (1 << MCACHE_SIZE_EXP ); i ++ ) {
239239 struct type_cache_entry * entry = & cache -> hashtable [i ];
240240 entry -> version = 0 ;
241- // Set to None, rather than NULL, so _PyType_Lookup() can
242- // use Py_SETREF() rather than using slower Py_XSETREF().
243- Py_XSETREF (entry -> name , Py_NewRef (Py_None ));
241+ Py_XSETREF (entry -> name , _Py_XNewRef (value ));
244242 entry -> value = NULL ;
245243 }
246244}
@@ -279,7 +277,9 @@ _PyType_ClearCache(PyInterpreterState *interp)
279277 sizeof (cache -> hashtable ) / 1024 );
280278#endif
281279
282- type_cache_clear (cache );
280+ // Set to None, rather than NULL, so _PyType_Lookup() can
281+ // use Py_SETREF() rather than using slower Py_XSETREF().
282+ type_cache_clear (cache , Py_None );
283283
284284 return next_version_tag - 1 ;
285285}
@@ -297,12 +297,7 @@ void
297297_PyType_Fini (PyInterpreterState * interp )
298298{
299299 struct type_cache * cache = & interp -> type_cache ;
300- for (Py_ssize_t i = 0 ; i < (1 << MCACHE_SIZE_EXP ); i ++ ) {
301- struct type_cache_entry * entry = & cache -> hashtable [i ];
302- entry -> version = 0 ;
303- Py_CLEAR (entry -> name );
304- entry -> value = NULL ;
305- }
300+ type_cache_clear (cache , NULL );
306301 if (_Py_IsMainInterpreter (interp )) {
307302 clear_slotdefs ();
308303 }
0 commit comments