diff options
author | Simon Marlow <marlowsd@gmail.com> | 2009-09-10 15:16:23 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2009-09-10 15:16:23 +0000 |
commit | ade3fa142f044ff00f1a5839c187f32213a48a41 (patch) | |
tree | 5815a78538de3f315314739ff77967cdc9a55001 /rts | |
parent | 0a30f73f8b8757f4cecb9e39804a35e49ea24a7f (diff) | |
download | haskell-ade3fa142f044ff00f1a5839c187f32213a48a41.tar.gz |
Fix #3320: we forgot to save/restore the GC register variable
Diffstat (limited to 'rts')
-rw-r--r-- | rts/sm/GC.c | 7 |
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 |