summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2019-02-13 15:12:22 -0500
committerBen Gamari <ben@smart-cactus.org>2019-02-22 11:26:41 -0500
commitec03303d29ce604660c0e67e5aeb4b1ac8194dfd (patch)
tree4c990831357c26b82732ee3a294bb874777455e9
parenta12ac46826cddb4ce798e4d7d80747aa9f8b1d69 (diff)
downloadhaskell-ec03303d29ce604660c0e67e5aeb4b1ac8194dfd.tar.gz
rts: Add missing write barrier for addCFinalizerToWeak#
Fixes #154.
-rw-r--r--rts/PrimOps.cmm6
1 files changed, 6 insertions, 0 deletions
diff --git a/rts/PrimOps.cmm b/rts/PrimOps.cmm
index 77b5d62cc1..da6b6f16d8 100644
--- a/rts/PrimOps.cmm
+++ b/rts/PrimOps.cmm
@@ -799,6 +799,12 @@ stg_addCFinalizzerToWeakzh ( W_ fptr, // finalizer
return (0);
}
+ // Write barrier for concurrent non-moving collector
+ if (nonmoving_write_barrier_enabled != 0) (likely: False) {
+ ccall updateRemembSetPushClosure(MyCapability() "ptr",
+ StgWeak_cfinalizers(w) "ptr", NULL);
+ }
+
StgCFinalizerList_link(c) = StgWeak_cfinalizers(w);
StgWeak_cfinalizers(w) = c;