aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--gc.c12
2 files changed, 17 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 059e321a2f..aa7eff401b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sat Jun 16 21:37:43 2007 Tanaka Akira <akr@fsij.org>
+
+ * gc.c (gc_sweep): re-introduce heap extension strategy change.
+ [ruby-dev:31005]
+
Fri Jun 15 22:59:37 2007 Tanaka Akira <akr@fsij.org>
* .gdbinit: new file to ease debugging using gdb.
@@ -8,6 +13,7 @@ Fri Jun 15 22:33:55 2007 Tanaka Akira <akr@fsij.org>
(trap_handler): support SYSTEM_DEFAULT. call default_handler
internally.
(sig_trap): don't call default_handler.
+ [ruby-dev:30999]
Fri Jun 15 22:33:29 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
@@ -19,6 +25,7 @@ Fri Jun 15 20:50:02 2007 Tanaka Akira <akr@fsij.org>
* keywords: enclose C code in declaration section by %{ and %} to
avoid extra semicolon after #ifdef RIPPER.
+ pointed by eban.
Fri Jun 15 18:56:52 2007 Tanaka Akira <akr@fsij.org>
diff --git a/gc.c b/gc.c
index 0f0bee0bb2..38097ef2da 100644
--- a/gc.c
+++ b/gc.c
@@ -1109,6 +1109,14 @@ gc_sweep(void)
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;
mark_source_filename(ruby_sourcefile);
if (source_filenames) {
@@ -1151,7 +1159,7 @@ gc_sweep(void)
}
p++;
}
- if (n == heaps[i].limit && freed > FREE_MIN) {
+ if (n == heaps[i].limit && freed > free_min) {
RVALUE *pp;
heaps[i].limit = 0;
@@ -1169,7 +1177,7 @@ gc_sweep(void)
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;