なかだです。

At Mon, 17 Sep 2001 01:24:16 +0900,
matz / ruby-lang.org (Yukihiro Matsumoto) wrote:
> どうなんでしょうねえ。私にもやってみないと良く分かりません。
> ただ、make testもrubiconもスレッドとスタック周りで複雑なこと
> をしていませんから、これが動けば大丈夫ってわけにはいかないで
> しょうね。

 とりあえず考えたテストケースはこんなのです。

  def garbage
    1000.times {"foo"*1000*100}
    GC.start
  end

  module DeadScope
    Foo = "DeadScope::Foo"
  end

  def test_dead_thread_proc_local
    t = nil
    Thread.start {
      x = "sub"
      t = proc {x}
    }.join
    garbage
    assert_equals("sub", t.call)
  end

  def test_dead_thread_proc_module
    t = nil
    Thread.start {
      Object.new.extend(DeadScope).instance_eval {
	t = proc {Foo}
      }
    }.join
    garbage
    assert_equals(DeadScope::Foo, t.call)
  end

> スタックの解放はやっても良いかなと思います。あまり問題なさそ
> うだし。その他の解放の方は自信がないです。問題がないと分かれ
> ば取り込んでもよいですけど。

 GCが絡んでくるとちょっと微妙ですからねぇ。自分で言い出しとい
てなんですが、やはり大丈夫と言い切る自信はありません。

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦