From 60802db56111ebf24933439d1ea37cc1b04bb98a Mon Sep 17 00:00:00 2001
From: Ben Gamari <ben@smart-cactus.org>
Date: Thu, 22 Jun 2023 19:00:06 -0400
Subject: [PATCH] rts/Prof: Fix data race

---
 rts/Proftimer.c | 3 ++-
 rts/sm/GC.c     | 4 ++--
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/rts/Proftimer.c b/rts/Proftimer.c
index 22ef1c417182..be29c06ec8bc 100644
--- a/rts/Proftimer.c
+++ b/rts/Proftimer.c
@@ -124,7 +124,8 @@ handleProfTick(void)
         uint32_t n;
         for (n=0; n < getNumCapabilities(); n++) {
             Capability *cap = getCapability(n);
-            cap->r.rCCCS->time_ticks++;
+            CostCentreStack *ccs = RELAXED_LOAD(&cap->r.rCCCS);
+            ccs->time_ticks++;
             traceProfSampleCostCentre(cap, cap->r.rCCCS, total_ticks);
         }
     }
diff --git a/rts/sm/GC.c b/rts/sm/GC.c
index 51f8b32e4b00..200df4a2f598 100644
--- a/rts/sm/GC.c
+++ b/rts/sm/GC.c
@@ -340,8 +340,8 @@ GarbageCollect (struct GcConfig config,
   // attribute any costs to CCS_GC
 #if defined(PROFILING)
   for (n = 0; n < getNumCapabilities(); n++) {
-      save_CCS[n] = getCapability(n)->r.rCCCS;
-      getCapability(n)->r.rCCCS = CCS_GC;
+      save_CCS[n] = RELAXED_LOAD(&getCapability(n)->r.rCCCS);
+      RELAXED_STORE(&getCapability(n)->r.rCCCS, CCS_GC);
   }
 #endif
 
-- 
GitLab