summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Python/gc_free_threading.c25
-rw-r--r--Tools/tsan/suppressions_free_threading.txt1
2 files changed, 13 insertions, 13 deletions
diff --git a/Python/gc_free_threading.c b/Python/gc_free_threading.c
index 8c0940d..ef6aaad 100644
--- a/Python/gc_free_threading.c
+++ b/Python/gc_free_threading.c
@@ -1044,9 +1044,20 @@ record_deallocation(PyThreadState *tstate)
}
static void
-gc_collect_internal(PyInterpreterState *interp, struct collection_state *state)
+gc_collect_internal(PyInterpreterState *interp, struct collection_state *state, int generation)
{
_PyEval_StopTheWorld(interp);
+
+ // update collection and allocation counters
+ if (generation+1 < NUM_GENERATIONS) {
+ state->gcstate->old[generation].count += 1;
+ }
+
+ state->gcstate->young.count = 0;
+ for (int i = 1; i <= generation; ++i) {
+ state->gcstate->old[i-1].count = 0;
+ }
+
// merge refcounts for all queued objects
merge_all_queued_objects(interp, state);
process_delayed_frees(interp);
@@ -1115,7 +1126,6 @@ error:
static Py_ssize_t
gc_collect_main(PyThreadState *tstate, int generation, _PyGC_Reason reason)
{
- int i;
Py_ssize_t m = 0; /* # objects collected */
Py_ssize_t n = 0; /* # unreachable objects that couldn't be collected */
PyTime_t t1 = 0; /* initialize to prevent a compiler warning */
@@ -1161,15 +1171,6 @@ gc_collect_main(PyThreadState *tstate, int generation, _PyGC_Reason reason)
PyDTrace_GC_START(generation);
}
- /* update collection and allocation counters */
- if (generation+1 < NUM_GENERATIONS) {
- gcstate->old[generation].count += 1;
- }
- gcstate->young.count = 0;
- for (i = 1; i <= generation; i++) {
- gcstate->old[i-1].count = 0;
- }
-
PyInterpreterState *interp = tstate->interp;
struct collection_state state = {
@@ -1177,7 +1178,7 @@ gc_collect_main(PyThreadState *tstate, int generation, _PyGC_Reason reason)
.gcstate = gcstate,
};
- gc_collect_internal(interp, &state);
+ gc_collect_internal(interp, &state, generation);
m = state.collected;
n = state.uncollectable;
diff --git a/Tools/tsan/suppressions_free_threading.txt b/Tools/tsan/suppressions_free_threading.txt
index 4b1a2fd..4f6648a 100644
--- a/Tools/tsan/suppressions_free_threading.txt
+++ b/Tools/tsan/suppressions_free_threading.txt
@@ -27,7 +27,6 @@ race:_PyObject_GC_TRACK
race:_PyParkingLot_Park
race:_PyType_HasFeature
race:assign_version_tag
-race:gc_collect_main
race:gc_restore_tid
race:initialize_new_array
race:insertdict