diff options
author | Simon Marlow <marlowsd@gmail.com> | 2009-12-31 16:02:23 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2009-12-31 16:02:23 +0000 |
commit | 5178da7f966c810c3d64fee02c1161406f9ac1d2 (patch) | |
tree | b9a6235fe97ff0d8e10e152b4923ae498b87c587 /compiler/codeGen/CgClosure.lhs | |
parent | bfe90953c7700efb3b62a7c63a823608add077b8 (diff) | |
download | haskell-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.lhs | 5 |
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 |