Please try this one.
cheers
felix
Index: runtime.c
===================================================================
--- runtime.c (revision 12851)
+++ runtime.c (working copy)
@@ -2706,6 +2706,10 @@
for(gcrp = gc_root_list; gcrp != NULL; gcrp = gcrp->next)
mark(&gcrp->value);
+ /* mark finalizer procedures: */
+ for(flist = finalizer_list; flist != NULL; flist = flist->next)
+ mark(&flist->finalizer);
+
mark_system_globals();
}
else {
@@ -2770,7 +2774,6 @@
for(flist = finalizer_list; flist != NULL; flist = flist->next) {
mark(&flist->item);
- mark(&flist->finalizer);
++fcount;
}
@@ -2780,9 +2783,6 @@
else {
j = fcount = 0;
- for(flist = finalizer_list; flist != NULL; flist = flist->next)
- mark(&flist->finalizer);
-
for(flist = finalizer_list; flist != NULL; flist = flist->next) {
if(j < C_max_pending_finalizers) {
if(!is_fptr(C_block_header(flist->item)))
@@ -2797,7 +2797,7 @@
finalizers_checked = 1;
if(pending_finalizer_count > 0 && gc_report_flag)
- C_printf(C_text("[GC] finalizers pending for rescan: %d (%d live)\n"),
+ C_printf(C_text("[GC] finalizers pending: %d (%d live)\n"),
pending_finalizer_count, live_finalizer_count);
goto rescan;
_______________________________________________
Chicken-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/chicken-users