From ade3fa142f044ff00f1a5839c187f32213a48a41 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Thu, 10 Sep 2009 15:16:23 +0000 Subject: [PATCH] Fix #3320: we forgot to save/restore the GC register variable --- rts/sm/GC.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/rts/sm/GC.c b/rts/sm/GC.c index d2217b8..febede6 100644 --- a/rts/sm/GC.c +++ b/rts/sm/GC.c @@ -1066,6 +1066,11 @@ loop: void gcWorkerThread (Capability *cap) { + gc_thread *saved_gct; + + // necessary if we stole a callee-saves register for gct: + saved_gct = gct; + cap->in_gc = rtsTrue; gct = gc_threads[cap->no]; @@ -1105,6 +1110,8 @@ gcWorkerThread (Capability *cap) gct->thread_index); ACQUIRE_SPIN_LOCK(&gct->mut_spin); debugTrace(DEBUG_gc, "GC thread %d on my way...", gct->thread_index); + + SET_GCT(saved_gct); } #endif -- 1.7.10.4