summaryrefslogtreecommitdiff
path: root/rts/PrimOps.cmm
diff options
context:
space:
mode:
authorEdward Z. Yang <ezyang@cs.stanford.edu>2014-05-29 20:05:51 -0700
committerEdward Z. Yang <ezyang@cs.stanford.edu>2014-05-29 20:05:51 -0700
commit723095b0e4c5838c7eefd757af56ab2a7c614801 (patch)
tree1581da2255fe571fc567992feb3422cebf3f59c7 /rts/PrimOps.cmm
parent0c1974c8262f1609ecb7dec438d8cd167f788a5c (diff)
downloadhaskell-723095b0e4c5838c7eefd757af56ab2a7c614801.tar.gz
Per-capability nursery weak pointer lists, fixes #9075
Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Diffstat (limited to 'rts/PrimOps.cmm')
-rw-r--r--rts/PrimOps.cmm9
1 files changed, 5 insertions, 4 deletions
diff --git a/rts/PrimOps.cmm b/rts/PrimOps.cmm
index 1dc232d9a7..84bcea5bff 100644
--- a/rts/PrimOps.cmm
+++ b/rts/PrimOps.cmm
@@ -577,10 +577,11 @@ stg_mkWeakzh ( gcptr key,
StgWeak_finalizer(w) = finalizer;
StgWeak_cfinalizers(w) = stg_NO_FINALIZER_closure;
- ACQUIRE_LOCK(sm_mutex);
- StgWeak_link(w) = generation_weak_ptr_list(W_[g0]);
- generation_weak_ptr_list(W_[g0]) = w;
- RELEASE_LOCK(sm_mutex);
+ StgWeak_link(w) = Capability_weak_ptr_list_hd(MyCapability());
+ Capability_weak_ptr_list_hd(MyCapability()) = w;
+ if (Capability_weak_ptr_list_tl(MyCapability()) == NULL) {
+ Capability_weak_ptr_list_tl(MyCapability()) = w;
+ }
IF_DEBUG(weak, ccall debugBelch(stg_weak_msg,w));