まつもと ゆきひろです

In message "[ruby-dev:21633] bug?"
    on 03/10/19, Yoshiki Wada <ysk / rc5.so-net.ne.jp> writes:

|下に付けたコードをruby 1.8.0(OSはFreeBSD 4.6-RELEASE)で実行すると、
|メモリ消費量がどんどん増えていきます。
|
|Rubyのバグなのか私の環境の問題なのかがわかっていないので
|私の勘違いの可能性があり、その場合はもうしわけないのですが、
|とりあえず報告いたします。

バグでした。以下のパッチで直ります。他に副作用が無いか検証中
です。

--- gc.c	6 Oct 2003 17:59:52 -0000	1.159
+++ gc.c	20 Oct 2003 02:00:19 -0000
@@ -971,3 +971,3 @@ gc_sweep()
 	}
-	if (n == heaps[i].limit && freed + n > FREE_MIN) {
+	if (n == heaps[i].limit && freed > FREE_MIN) {
 	    RVALUE *pp;
@@ -984,8 +984,2 @@ gc_sweep()
     }
-    malloc_limit += (malloc_increase - malloc_limit) * (double)live / (live + freed);
-    if (malloc_limit < GC_MALLOC_LIMIT) malloc_limit = GC_MALLOC_LIMIT;
-    malloc_increase = 0;
-    if (freed < FREE_MIN) {
-	add_heap();
-    }
     during_gc = 0;
@@ -1022,2 +1016,10 @@ gc_sweep()
 	}
+    }
+    if (malloc_increase > malloc_limit) {
+	malloc_limit += (malloc_increase - malloc_limit) * (double)live / (live + freed);
+	if (malloc_limit < GC_MALLOC_LIMIT) malloc_limit = GC_MALLOC_LIMIT;
+	malloc_increase = 0;
+    }
+    if (freed < FREE_MIN) {
+	add_heap();
     }