Bläddra i källkod

Wed Feb 16 22:30:54 CET 2005 Paolo Molaro <[email protected]>

	* 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).


svn path=/trunk/mono/; revision=40776
Paolo Molaro 21 år sedan
förälder
incheckning
9e4431fee8
2 ändrade filer med 16 tillägg och 1 borttagningar
  1. 8 0
      libgc/ChangeLog
  2. 8 1
      libgc/alloc.c

+ 8 - 0
libgc/ChangeLog

@@ -1,3 +1,11 @@
+
+Wed Feb 16 22:30:54 CET 2005 Paolo Molaro <[email protected]>
+
+	* 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  <[email protected]>
 
 	* include/private/gc_priv.h: Bump the max root sets to 1024

+ 8 - 1
libgc/alloc.c

@@ -1021,13 +1021,20 @@ unsigned GC_fail_count = 0;
 			/* 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;