diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | gc.c | 12 |
2 files changed, 15 insertions, 2 deletions
@@ -1,3 +1,8 @@ +Mon Jul 10 19:22:19 2006 Tanaka Akira <akr@fsij.org> + + * gc.c (gc_sweep): expand heap earlier. + reported by MORITA Naoyuki. [ruby-dev:28960] + Mon Jul 10 18:59:34 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp> * ext/tk/lib/tk/font.rb: sorry. mistaken to patch. @@ -1056,6 +1056,14 @@ gc_sweep() int freed = 0; int i; unsigned long live = 0; + unsigned long free_min = 0; + + for (i = 0; i < heaps_used; i++) { + free_min += heaps[i].limit; + } + free_min = free_min * 0.2; + if (free_min < FREE_MIN) + free_min = FREE_MIN; if (ruby_in_compile && ruby_parser_stack_on_heap()) { /* should not reclaim nodes during compilation @@ -1111,7 +1119,7 @@ gc_sweep() } p++; } - if (n == heaps[i].limit && freed > FREE_MIN) { + if (n == heaps[i].limit && freed > free_min) { RVALUE *pp; heaps[i].limit = 0; @@ -1129,7 +1137,7 @@ gc_sweep() if (malloc_limit < GC_MALLOC_LIMIT) malloc_limit = GC_MALLOC_LIMIT; } malloc_increase = 0; - if (freed < FREE_MIN) { + if (freed < free_min) { add_heap(); } during_gc = 0; |