summaryrefslogtreecommitdiff
path: root/rts/CheckUnload.c
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2013-11-21 12:25:30 +0000
committerSimon Marlow <marlowsd@gmail.com>2013-11-21 13:27:34 +0000
commitbeaf8c370a25fdba1eb5d4aca820ea4677ade062 (patch)
treed4c057221b837dd5455657b45362f656355e956a /rts/CheckUnload.c
parente82fa82933e6984c5b9507a0d857b0c579bd0f46 (diff)
downloadhaskell-beaf8c370a25fdba1eb5d4aca820ea4677ade062.tar.gz
CheckUnload needs to look at revertible_caf_list
Retained CAFs must keep an object file alive.
Diffstat (limited to 'rts/CheckUnload.c')
-rw-r--r--rts/CheckUnload.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/rts/CheckUnload.c b/rts/CheckUnload.c
index d3fb8934b5..8692dea8bf 100644
--- a/rts/CheckUnload.c
+++ b/rts/CheckUnload.c
@@ -267,6 +267,13 @@ void checkUnload (StgClosure *static_objects)
link = *STATIC_LINK(info, p);
}
+ // CAFs on revertible_caf_list are not on static_objects
+ for (p = (StgClosure*)revertible_caf_list;
+ p != END_OF_STATIC_LIST;
+ p = ((StgIndStatic *)p)->static_link) {
+ checkAddress(addrs, p);
+ }
+
for (g = 0; g < RtsFlags.GcFlags.generations; g++) {
searchHeapBlocks (addrs, generations[g].blocks);
searchHeapBlocks (addrs, generations[g].large_objects);