まつもと ゆきひろです
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();
}