--- library.scm.orig	2006-01-23 16:20:18.000000000 -0600
+++ library.scm	2006-01-23 16:19:23.000000000 -0600
@@ -3487,9 +3487,18 @@
   (let ((print print))
     (lambda (x y)
       (when (fx> (##sys#fudge 26) _max_pending_finalizers)
-	(when (##sys#fudge 13)
-	  (print "[debug] too many finalizers (" (##sys#fudge 26) "), forcing ...") )
-	(##sys#force-finalizers) ) 
+	(if (##core#inline "C_resize_pending_finalizers" (fx* 2 _max_pending_finalizers))
+	    (begin
+	      (set! ##sys#pending-finalizers (##sys#grow-vector ##sys#pending-finalizers
+								(fx+ (fx* 2 _max_pending_finalizers) 1)
+								(##core#undefined)))
+	      (when (##sys#fudge 13)
+		(print "[debug] too many finalizers (" (##sys#fudge 26)
+		       "), resized max finalizers to " _max_pending_finalizers "...") ) )
+	    (begin
+	      (when (##sys#fudge 13)
+		(print "[debug] too many finalizers (" (##sys#fudge 26) "), forcing ...") )
+	      (##sys#force-finalizers) ) ) )
       (##sys#set-finalizer! x y) ) ) )
 
 (define ##sys#run-pending-finalizers
--- runtime.c.orig	2006-01-23 15:24:03.000000000 -0600
+++ runtime.c	2006-01-23 16:22:43.000000000 -0600
@@ -988,6 +988,19 @@
     panic(C_text("nursery is too small - try higher setting using the `-:s' option"));
 }
 
+C_word C_resize_pending_finalizers(C_word size) {
+  int sz = C_num_to_int(size);
+
+  FINALIZER_NODE **newmem = 
+    (FINALIZER_NODE **)C_realloc(pending_finalizer_indices, sz * sizeof(FINALIZER_NODE *));
+  
+  if (newmem == NULL)
+    return C_SCHEME_FALSE;
+
+  pending_finalizer_indices = newmem;
+  C_max_pending_finalizers = sz;
+  return C_SCHEME_TRUE;
+}
 
 /* Parse runtime options from command-line: */
 
--- chicken.h.orig	2006-01-23 16:20:27.000000000 -0600
+++ chicken.h	2006-01-23 16:20:51.000000000 -0600
@@ -1155,6 +1155,7 @@
 C_fctexport void C_zap_strings(C_word str);
 C_fctexport void C_set_or_change_heap_size(C_word heap, int reintern);
 C_fctexport void C_do_resize_stack(C_word stack);
+C_fctexport C_word C_resize_pending_finalizers(C_word size);
 C_fctexport void C_initialize_lf(C_word *lf, int count);
 C_fctexport void *C_register_lf(C_word *lf, int count);
 C_fctexport void *C_register_lf2(C_word *lf, int count, C_PTABLE_ENTRY *ptable);
