From: matz@... (Yukihiro Matsumoto) Date: 2000-01-17T16:53:11+09:00 Subject: [ruby-dev:8946] Re: [BUG] recycle the ruby_dyna_vars まつもと ゆきひろです In message "[ruby-dev:8941] [BUG] recycle the ruby_dyna_vars" on 00/01/17, Koji Arai writes: |バグ報告(ruby-1.5.0)です。 |以下のコードで、2回目の p x がnilを表示します。 分かりました。 添付のようなパッチで良いのでは。 |ruby_dyna_vars->id == 0なエントリの意味もついでに教えていた |だければうれしいです。 id==0のエントリから次のid==0のエントリの間までが一番内側のブ ロックで導入されたブロック内ローカル変数に相当します。これら はclosureなどの実現に使われています(と思う)。 この辺は複雑ですぐに忘れちゃう。 Index: eval.c =================================================================== RCS file: /home/cvs/ruby/eval.c,v retrieving revision 1.24 diff -u -1 -r1.24 eval.c --- eval.c 2000/01/05 04:36:59 1.24 +++ eval.c 2000/01/17 07:50:31 @@ -3335,6 +3341,9 @@ - do { + while (vars && vars->id != 0) { rb_gc_force_recycle((VALUE)vars); vars = vars->next; - } while (vars && vars->id != 0); + } + if (ruby_dyna_vars->id == 0) { + rb_gc_force_recycle((VALUE)ruby_dyna_vars); + } }