need locking around use of weak_ptr_list in mkWeak#
authorSimon Marlow <marlowsd@gmail.com>
Mon, 7 Dec 2009 14:52:13 +0000 (14:52 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Mon, 7 Dec 2009 14:52:13 +0000 (14:52 +0000)
rts/PrimOps.cmm

index 5e762b1..b88ca7a 100644 (file)
@@ -321,8 +321,10 @@ stg_mkWeakzh
   StgWeak_finalizer(w)  = R3;
   StgWeak_cfinalizer(w) = stg_NO_FINALIZER_closure;
 
+  ACQUIRE_LOCK(sm_mutex);
   StgWeak_link(w)      = W_[weak_ptr_list];
   W_[weak_ptr_list]    = w;
+  RELEASE_LOCK(sm_mutex);
 
   IF_DEBUG(weak, foreign "C" debugBelch(stg_weak_msg,w) []);