summaryrefslogtreecommitdiff
path: root/rts
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2009-09-10 15:16:23 +0000
committerSimon Marlow <marlowsd@gmail.com>2009-09-10 15:16:23 +0000
commitade3fa142f044ff00f1a5839c187f32213a48a41 (patch)
tree5815a78538de3f315314739ff77967cdc9a55001 /rts
parent0a30f73f8b8757f4cecb9e39804a35e49ea24a7f (diff)
downloadhaskell-ade3fa142f044ff00f1a5839c187f32213a48a41.tar.gz
Fix #3320: we forgot to save/restore the GC register variable
Diffstat (limited to 'rts')
-rw-r--r--rts/sm/GC.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/rts/sm/GC.c b/rts/sm/GC.c
index d2217b8786..febede6b66 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