From: Masatoshi Seki Date: 2003-09-17T05:48:24+09:00 Subject: [ruby-dev:21386] Re: LocalJumpError -> ThreadError 咳といいます。 > |数日前からCVS版のruby-1.8でdRubyのユニットテストが通らなくなりました。 > |ユニットテストでは、breakの検査でエラーとなっていて、従来LocalJumpError > |だったと思われるところで > | > | break jump can't across threads (ThreadError) > | > |といった例外が出ているようです。 > | > |また、動作しなくなってしまったdRubyのアプリケーションでは次のような > |例外が出ていました。 > | > | return jump can't across threads (ThreadError) > | > |まだちゃんと追えていないのですが、LocalJumpErrorからThreadErrorへ > |変わっていくのでしょうか。 > > もともとThread内部でのreturnにはThreadErrorをあげていたはず > です(だから仕様変更のつもりではない)。たぶんどこかで微妙に動 > 作が違ってしまったのでしょう。再現スクリプトはありますか? 後者(return)はまだ準備できていませんが、前者(break)はdrbのrunit/test_drb.rbです。 irbではこんな感じです。 [Terminal-1] % irb -r drb >> DRb.start_service(nil, {}) >> DRb.uri => "druby://snow.local.:51600" [Terminal-2] % irb -r drb >> DRb.start_service() >> hash = DRbObject.new_with_uri("druby://snow.local.:51600") >> hash[1] = 1 >> hash[2] = 2 >> hash.each {|k, v| p k; break} ThreadError: break jump can't across threads from (druby://snow.local.:51601) (irb):7 from (druby://snow.local.:51601) (irb):7:in `call' from (druby://snow.local.:51600) /usr/local/lib/ruby/1.8/drb/invokemethod.rb:7:in `block_yield' from (druby://snow.local.:51600) /usr/local/lib/ruby/1.8/drb/invokemethod.rb:14:in `perform_with_block' from (druby://snow.local.:51600) /usr/local/lib/ruby/1.8/drb/invokemethod.rb:11:in `each' from (irb):7 rubyだけで再現させるスクリプトはまだ挑戦してません。 今夜やってみよう。