diff --git a/rts/Proftimer.c b/rts/Proftimer.c index 22ef1c417182e2c2a28c25ed7c37d1c3ad87515f..be29c06ec8bc5de3669646c3fb94ecd442b1cb84 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 51f8b32e4b0027a8b0179b670925a7f3ff8730de..200df4a2f598346f615e2be91cceb03f590a39e2 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