まつもと ゆきひろです

In message "[ruby-dev:21386] Re: LocalJumpError -> ThreadError"
    on 03/09/17, Masatoshi Seki <m_seki / mva.biglobe.ne.jp> writes:

|> もともとThread内部でのreturnにはThreadErrorをあげていたはず
|> です(だから仕様変更のつもりではない)。たぶんどこかで微妙に動
|> 作が違ってしまったのでしょう。再現スクリプトはありますか?
|
|後者(return)はまだ準備できていませんが、前者(break)はdrbのrunit/test_drb.rbです。
|irbではこんな感じです。

今朝調べてみたら、純正1.8.0ではbreakでは例外をあげていません
でした。以下のパッチでどうでしょう。

returnの方は引き続きお待ちしております。

--- eval.c	12 Sep 2003 03:30:45 -0000	1.535
+++ eval.c	17 Sep 2003 03:25:36 -0000
@@ -4030,3 +4030,3 @@ localjump_destination(state, scope, retv
     while (tt) {
-	if (tt->tag == PROT_PCALL ||
+	if (tt->tag == PROT_PCALL || (tt->tag == PROT_THREAD && state == TAG_BREAK) ||
 	    (tt->tag == PROT_CALL || tt->tag == tag) && tt->scope == scope) {
@@ -4038,4 +4038,3 @@ localjump_destination(state, scope, retv
 	if (tt->tag == PROT_THREAD) {
-	    rb_raise(rb_eThreadError, "%s jump can't across threads",
-		     (state == TAG_BREAK) ? "break" : "return");
+	    rb_raise(rb_eThreadError, "return jump can't across threads");
 	}