From 90d9413391ea3f7d05b5cf38e6eef676ec68a529 Mon Sep 17 00:00:00 2001 From: drbrain Date: Sat, 23 Mar 2013 18:35:23 +0000 Subject: Commit miss git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39891 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/rinda/test_rinda.rb | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'test/rinda') diff --git a/test/rinda/test_rinda.rb b/test/rinda/test_rinda.rb index 45f49a740c..13f5d6d2bb 100644 --- a/test/rinda/test_rinda.rb +++ b/test/rinda/test_rinda.rb @@ -477,6 +477,46 @@ class TupleSpaceProxyTest < Test::Unit::TestCase @ts.take({'head' => 1, 'tail' => 2}, 0)) end + def test_take_bug_8215 + DRb.stop_service + service = DRb.start_service(nil, @ts_base) + + uri = service.uri + + take = fork do + DRb.stop_service + DRb.start_service + ro = DRbObject.new_with_uri(uri) + ts = Rinda::TupleSpaceProxy.new(ro) + th = Thread.new do + ts.take([:test_take, nil]) + end + Kernel.sleep(0.1) + th.raise(Interrupt) # causes loss of the taken tuple + ts.write([:barrier, :continue]) + Kernel.sleep + end + + @ts_base.take([:barrier, :continue]) + + write = fork do + DRb.stop_service + DRb.start_service + ro = DRbObject.new_with_uri(uri) + ts = Rinda::TupleSpaceProxy.new(ro) + ts.write([:test_take, 42]) + end + + status = Process.wait(write) + + assert_equal([[:test_take, 42]], @ts_base.read_all([:test_take, nil]), + '[bug:8215] tuple lost') + ensure + Process.kill("TERM", write) if write && status.nil? + Process.kill("TERM", take) if take + service.stop_service + end + @server = DRb.primary_server || DRb.start_service end -- cgit v1.2.3