+
+Wed Feb 16 22:30:54 CET 2005 Paolo Molaro <lupus@ximian.com>
+
+ * alloc.c: tune the code to collect instead of expanding
+ the heap if there are many finalizers and we reclaimed some
+ memory from cleaning the finalization queue (should fix
+ bug #71001 and #70701).
+
2005-02-07 Geoff Norton <gnorton@customerdna.com>
* include/private/gc_priv.h: Bump the max root sets to 1024
/* How many consecutive GC/expansion failures? */
/* Reset by GC_allochblk. */
+static word last_fo_entries = 0;
+static word last_words_finalized = 0;
+
GC_bool GC_collect_or_expand(needed_blocks, ignore_off_page)
word needed_blocks;
GC_bool ignore_off_page;
{
if (!GC_incremental && !GC_dont_gc &&
- (GC_dont_expand && GC_words_allocd > 0 || GC_should_collect())) {
+ (GC_dont_expand && GC_words_allocd > 0
+ || (GC_fo_entries > (last_fo_entries + 500) && (last_words_finalized || GC_words_finalized))
+ || GC_should_collect())) {
GC_gcollect_inner();
+ last_fo_entries = GC_fo_entries;
+ last_words_finalized = GC_words_finalized;
} else {
word blocks_to_get = GC_heapsize/(HBLKSIZE*GC_free_space_divisor)
+ needed_blocks;