summaryrefslogtreecommitdiff
path: root/compiler/codeGen/CgClosure.lhs
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2009-12-31 16:02:23 +0000
committerSimon Marlow <marlowsd@gmail.com>2009-12-31 16:02:23 +0000
commit5178da7f966c810c3d64fee02c1161406f9ac1d2 (patch)
treeb9a6235fe97ff0d8e10e152b4923ae498b87c587 /compiler/codeGen/CgClosure.lhs
parentbfe90953c7700efb3b62a7c63a823608add077b8 (diff)
downloadhaskell-5178da7f966c810c3d64fee02c1161406f9ac1d2.tar.gz
take newCAF() out from sm_mutex; use the capability-local mut list instead
Diffstat (limited to 'compiler/codeGen/CgClosure.lhs')
-rw-r--r--compiler/codeGen/CgClosure.lhs5
1 files changed, 4 insertions, 1 deletions
diff --git a/compiler/codeGen/CgClosure.lhs b/compiler/codeGen/CgClosure.lhs
index 104af14754..f0fe3d17b2 100644
--- a/compiler/codeGen/CgClosure.lhs
+++ b/compiler/codeGen/CgClosure.lhs
@@ -560,7 +560,10 @@ link_caf cl_info _is_upd = do
-- so that the garbage collector can find them
-- This must be done *before* the info table pointer is overwritten,
-- because the old info table ptr is needed for reversion
- ; emitRtsCallWithVols rtsPackageId (fsLit "newCAF") [CmmHinted (CmmReg nodeReg) AddrHint] [node] False
+ ; emitRtsCallWithVols rtsPackageId (fsLit "newCAF")
+ [ CmmHinted (CmmReg (CmmGlobal BaseReg)) AddrHint,
+ CmmHinted (CmmReg nodeReg) AddrHint ]
+ [node] False
-- node is live, so save it.
-- Overwrite the closure with a (static) indirection