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

Reply via email to