From ef241371de7c4546b3ad45d7d190965be735f998 Mon Sep 17 00:00:00 2001 From: GHC GitLab CI <ghc-ci@gitlab-haskell.org> Date: Wed, 25 Nov 2020 23:08:50 +0000 Subject: [PATCH] nonmoving: Fix regression from TSAN work The TSAN rework (specifically aad1f803) introduced a subtle regression in GC.c, swapping `g0` in place of `gen`. Whoops! Fixes #18997. (cherry picked from commit 21c807df67afe1aee7bf4a964a00cc78ef19e00f) --- rts/sm/GC.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/rts/sm/GC.c b/rts/sm/GC.c index 6c947f06a93e..7a6345f469e9 100644 --- a/rts/sm/GC.c +++ b/rts/sm/GC.c @@ -1689,13 +1689,8 @@ collect_gct_blocks (void) static void collect_pinned_object_blocks (void) { - generation *gen; const bool use_nonmoving = RtsFlags.GcFlags.useNonmoving; - if (use_nonmoving && major_gc) { - gen = oldest_gen; - } else { - gen = g0; - } + generation *const gen = (use_nonmoving && major_gc) ? oldest_gen : g0; for (uint32_t n = 0; n < n_capabilities; n++) { bdescr *last = NULL; @@ -1720,7 +1715,7 @@ collect_pinned_object_blocks (void) if (gen->large_objects != NULL) { gen->large_objects->u.back = last; } - g0->large_objects = RELAXED_LOAD(&capabilities[n]->pinned_object_blocks); + gen->large_objects = RELAXED_LOAD(&capabilities[n]->pinned_object_blocks); RELAXED_STORE(&capabilities[n]->pinned_object_blocks, NULL); } } -- GitLab