From: Makoto Kishimoto Date: 2011-07-26T11:57:29+09:00 Subject: [ruby-dev:44233] [Ruby 1.9 - Bug #372] Rinda has a race condition Issue #372 has been updated by Makoto Kishimoto. > 1) Failure: > test_core_03_notify(Rinda::TupleSpaceProxyTest) > [/home/mame/work/ruby19/ruby/test/rinda/test_rinda.rb:397]: > <[0, 3]> expected but was > <[1, 2]>. 非常にごくまれに(1回も再現できていません)trunk でもこれが起きることがあるようです。 1) Failure: test_core_03_notify(Rinda::TupleSpaceTest) [/export/home/ksmakoto/ruby-working/ruby194/ruby-git/test/rinda/test_rinda.rb:398]: <[0, 3]> expected but was <[1, 2]>. という 1F を確認しました。 FreeBSD 8.2-STABLE で r32672 です。 ---------------------------------------- Bug #372: Rinda has a race condition http://redmine.ruby-lang.org/issues/372 Author: Anonymous Status: Rejected Priority: Low Assignee: Category: Target version: =begin 咳といいます。 1.8系のtuplespace.rbを修正した覚えがあるのですが、 1.8系でもやっぱりだめでしょうか? どちらにせよ、1.8のtuplespace.rbを1.9へ ciしようと思いますので、 よかったらあとでもう一度ためしてもらえますか? #いまビルド中なのでしばらく待ってください On 2008/07/24, at 22:22, Yusuke ENDOH wrote: > > > 調べていて気づいたのですが、以下のように Rinda に遅延 > を発生させると > > > Index: lib/rinda/tuplespace.rb > =================================================================== > --- lib/rinda/tuplespace.rb (revision 18194) > +++ lib/rinda/tuplespace.rb (working copy) > @@ -570,6 +570,7 @@ > keep_clean > sleep(@period) > end > + sleep 3 > end > end > > > 以下で deadlock detected になります。1.8 でも同 > 様です。 似たようなところで遅延させたんですが、こんな感じです。 Index: lib/rinda/tuplespace.rb =================================================================== --- lib/rinda/tuplespace.rb (revision 18222) +++ lib/rinda/tuplespace.rb (working copy) @@ -622,6 +622,7 @@ break unless need_keeper? keep_clean end +sleep(3) end end end $ ./ruby -rrinda/tuplespace -e ' ts = Rinda::TupleSpace.new(1) ts.take([:foo, :bar], 1) rescue nil sleep 2 ts.take([:foo, :bar], 1) ' /usr/local/lib/ruby/1.8/rinda/tuplespace.rb:503:in `move': Rinda::RequestExpiredError (Rinda::RequestExpiredError) from /usr/local/lib/ruby/1.8/monitor.rb:242:in `synchronize' from /usr/local/lib/ruby/1.8/rinda/tuplespace.rb:488:in `move' from /usr/local/lib/ruby/1.8/rinda/tuplespace.rb:479:in `take' from -e:5 =end -- http://redmine.ruby-lang.org