From: Yukihiro Matsumoto Date: 2009-10-01T01:18:34+09:00 Subject: [ruby-dev:39411] Re: #2009 File.open memory leak まつもと ゆきひろです In message "Re: [ruby-dev:39410] #2009 File.open memory leak" on Wed, 30 Sep 2009 23:54:20 +0900, とみたまさひろ writes: |# 英語はダメなので ruby-dev で… | |http://redmine.ruby-lang.org/issues/show/2009 の File.open memory leak |ですが、原因は r21435 の gc.c の次の変更だと思います。 なるほど。 |fptr の free() がなくなったためにメモリリークしてます。 | |次のようなすれば直りました。 1.9のようにrb_io_fptr_finalize()の最後でfptrをxfree()すれば良 いように思います。 こんなパッチを書いてみました。make testくらいはちゃんと動く ようです。採用するかどうかは1.8のメンテナーに任せます。 --- a/io.c +++ b/io.c @@ -2348,10 +2348,10 @@ rb_io_fptr_finalize(fptr) if (fptr->path) { free(fptr->path); } - if (!fptr->f && !fptr->f2) return; - if (fileno(fptr->f) < 3) return; - - rb_io_fptr_cleanup(fptr, Qtrue); + if ((fptr->f && fileno(fptr->f) > 2) || fptr->f2) { + rb_io_fptr_cleanup(fptr, Qtrue); + } + xfree(fptr); } VALUE