@@ -1602,8 +1602,6 @@ record_deallocation(PyThreadState *tstate)
16021602 }
16031603}
16041604
1605- static bool freeze_used ;
1606-
16071605static void
16081606gc_collect_internal (PyInterpreterState * interp , struct collection_state * state , int generation )
16091607{
@@ -1633,7 +1631,7 @@ gc_collect_internal(PyInterpreterState *interp, struct collection_state *state,
16331631 process_delayed_frees (interp , state );
16341632
16351633 #if 1
1636- if (!freeze_used ) {
1634+ if (!state -> gcstate -> freeze_used ) {
16371635 // Mark objects reachable from known roots as "alive". These will
16381636 // be ignored for rest of the GC pass.
16391637 int err = mark_root_reachable (interp , state );
@@ -2000,7 +1998,8 @@ _PyGC_Freeze(PyInterpreterState *interp)
20001998{
20011999 struct visitor_args args ;
20022000 _PyEval_StopTheWorld (interp );
2003- freeze_used = true;
2001+ GCState * gcstate = get_gc_state ();
2002+ gcstate -> freeze_used = 1 ;
20042003 gc_visit_heaps (interp , & visit_freeze , & args );
20052004 _PyEval_StartTheWorld (interp );
20062005}
@@ -2021,8 +2020,9 @@ _PyGC_Unfreeze(PyInterpreterState *interp)
20212020{
20222021 struct visitor_args args ;
20232022 _PyEval_StopTheWorld (interp );
2023+ GCState * gcstate = get_gc_state ();
2024+ gcstate -> freeze_used = 0 ;
20242025 gc_visit_heaps (interp , & visit_unfreeze , & args );
2025- freeze_used = false;
20262026 _PyEval_StartTheWorld (interp );
20272027}
20282028
0 commit comments