From: matz@... (Yukihiro Matsumoto) Date: 2003-10-20T11:00:44+09:00 Subject: [ruby-dev:21638] Re: bug? まつもと ゆきひろです In message "[ruby-dev:21633] bug?" on 03/10/19, Yoshiki Wada 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(); }