[前][次][番号順一覧][スレッド一覧]

ruby-changes:1863

From: ko1@a...
Date: 7 Sep 2007 05:44:56 +0900
Subject: [ruby-changes:1863] seki - Ruby:r13354 (ruby_1_8): * test/rinda/test_rinda.rb (MockClock): correct synchronous problems

seki	2007-09-07 05:44:46 +0900 (Fri, 07 Sep 2007)

  New Revision: 13354

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/test/rinda/test_rinda.rb

  Log:
    * test/rinda/test_rinda.rb (MockClock): correct synchronous problems 
      of the MultiThreading. [ruby-dev:31692]


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=13354&r2=13353
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/test/rinda/test_rinda.rb?r1=13354&r2=13353

Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 13353)
+++ ruby_1_8/ChangeLog	(revision 13354)
@@ -1,3 +1,8 @@
+Fri Sep  7 05:36:19 2007  Masatoshi SEKI  <m_seki@m...>
+
+	* test/rinda/test_rinda.rb (MockClock): correct synchronous problems 
+	  of the MultiThreading. [ruby-dev:31692]
+
 Wed Sep  5 22:02:27 2007  Yukihiro Matsumoto  <matz@r...>
 
 	* array.c (rb_ary_subseq): need integer overflow check.
Index: ruby_1_8/test/rinda/test_rinda.rb
===================================================================
--- ruby_1_8/test/rinda/test_rinda.rb	(revision 13353)
+++ ruby_1_8/test/rinda/test_rinda.rb	(revision 13354)
@@ -12,14 +12,14 @@
   include Singleton
 
   class MyTS < Rinda::TupleSpace
-    def keeper
+    def keeper_thread
       nil
     end
   end
   
   def initialize
     @now = 2
-    @reso = 0.1
+    @reso = 1
     @ts = MyTS.new
     @ts.write([2, :now])
     @inf = 2**31 - 1
@@ -40,10 +40,11 @@
     @ts.write([@now, :now])
   end
 
-  def forward(n=nil)
+  def forward(n)
     while n > 0
       _forward(@reso)
       n -= @reso
+      Thread.pass
     end
   end
 
@@ -56,20 +57,10 @@
   end
 
   def sleep(n=nil)
-    while will_deadlock? 
-      n -= @reso
-      forward
-      return 0 if n <= 0
-    end
     now ,= @ts.read([nil, :now])
     @ts.read([(now + n)..@inf, :now])
     0
   end
-
-  def will_deadlock?
-    sz = Thread.current.group.list.find_all {|x| x.status != 'sleep'}.size
-    sz <= 1
-  end
 end
 
 module Time
@@ -115,6 +106,14 @@
       Time.sleep(n)
     end
   end
+
+  def thread_join(th)
+    while th.alive?
+      Kernel.sleep(0.1)
+      sleep(1)
+    end
+    th.value
+  end
   
   def test_00_tuple
     tuple = Rinda::TupleEntry.new([1,2,3])
@@ -242,15 +241,15 @@
 
   def test_ruby_talk_264062
     th = Thread.new { @ts.take([:empty], 1) }
-    sleep 2
+    sleep(10)
     assert_raises(Rinda::RequestExpiredError) do
-      th.value
+      thread_join(th)
     end
 
     th = Thread.new { @ts.read([:empty], 1) }
-    sleep 2
+    sleep(10)
     assert_raises(Rinda::RequestExpiredError) do
-      th.value
+      thread_join(th)
     end
   end
 
@@ -266,7 +265,7 @@
       s = 0
       while true
 	begin
-	  tuple = @ts.take([:req, Integer], 0.5)
+	  tuple = @ts.take([:req, Integer], 1)
 	  assert_equal(2, tuple[1])
 	  s += tuple[1]
 	rescue Rinda::RequestExpiredError
@@ -277,10 +276,9 @@
       s
     end
     
-    sleep(20)
+    assert_equal(10, thread_join(taker))
     tuple = @ts.take([:ans, nil])
     assert_equal(10, tuple[1])
-    assert_equal(10, taker.value)
   end
 
   def test_core_02
@@ -288,7 +286,7 @@
       s = 0
       while true
 	begin
-	  tuple = @ts.take([:req, Integer], 1.0)
+	  tuple = @ts.take([:req, Integer], 1)
 	  assert_equal(2, tuple[1])
 	  s += tuple[1]
 	rescue Rinda::RequestExpiredError
@@ -303,10 +301,9 @@
       @ts.write([:req, 2])
     end
 
-    sleep(20)
+    assert_equal(10, thread_join(taker))
     tuple = @ts.take([:ans, nil])
     assert_equal(10, tuple[1])
-    assert_equal(10, taker.value)
     assert_equal([], @ts.read_all([nil, nil]))
   end
   
@@ -363,7 +360,7 @@
       s = 0
       while true
 	begin
-	  tuple = @ts.take([:req, Integer], 1.0)
+	  tuple = @ts.take([:req, Integer], 1)
 	  s += tuple[1]
 	rescue Rinda::RequestExpiredError
 	  break
@@ -373,26 +370,23 @@
       s
     end
 
-    writer = Thread.new do
-      5.times do |n|
-	@ts.write([:req, 2])
-	sleep 0.1
-      end
+    5.times do |n|
+      @ts.write([:req, 2])
     end
 
     @ts.take({"message"=>"first", "name"=>"3"})
 
     sleep(4)
+    assert_equal(10, thread_join(taker))
     tuple = @ts.take([:ans, nil])
     assert_equal(10, tuple[1])
-    assert_equal(10, taker.value)
     assert_equal([], @ts.read_all([nil, nil]))
     
     notify1.cancel
     sleep(3) # notify2 expired
     
-    assert_equal([0, 11], listener1.value)
-    assert_equal([0, 3], listener2.value)
+    assert_equal([0, 11], thread_join(listener1))
+    assert_equal([0, 3], thread_join(listener2))
 
     ary = []
     ary.push(["write", {"message"=>"first", "name"=>"3"}])
@@ -419,21 +413,21 @@
     taker = Thread.new do
       @ts.take([:take, nil], 10) do |template|
 	Thread.new do
-	  sleep 0.2
 	  template.cancel
 	end
       end
     end
     
-    sleep(1)
-    assert(template.canceled?)
-    
-    @ts.write([:take, 1])
+    sleep(2)
 
     assert_raises(Rinda::RequestCanceledError) do
-      assert_nil(taker.value)
+      assert_nil(thread_join(taker))
     end
 
+    assert(template.canceled?)
+    
+    @ts.write([:take, 1])
+
     assert_equal([[:take, 1]], @ts.read_all([nil, nil]))
   end
 
@@ -447,21 +441,21 @@
     reader = Thread.new do
       @ts.read([:take, nil], 10) do |template|
 	Thread.new do
-	  sleep 0.2
 	  template.cancel
 	end
       end
     end
 
-    sleep(1)
-    assert(template.canceled?)
-    
-    @ts.write([:take, 1])
+    sleep(2)
 
     assert_raises(Rinda::RequestCanceledError) do
-      assert_nil(reader.value)
+      assert_nil(thread_join(reader))
     end
 
+    assert(template.canceled?)
+    
+    @ts.write([:take, 1])
+
     assert_equal([[:take, 1]], @ts.read_all([nil, nil]))
   end
 
@@ -492,15 +486,16 @@
     assert(tuple.expired?)
     assert(!tuple.alive?)
 
-    tuple = Rinda::TupleEntry.new([1,2,3], SimpleRenewer.new(1,2))
+    @renewer = SimpleRenewer.new(1,2)
+    tuple = Rinda::TupleEntry.new([1,2,3], @renewer)
     assert(!tuple.canceled?)
     assert(!tuple.expired?)
     assert(tuple.alive?)
-    sleep(1.5)
+    sleep(1)
     assert(!tuple.canceled?)
     assert(!tuple.expired?)
     assert(tuple.alive?)
-    sleep(1.5)
+    sleep(2)
     assert(tuple.expired?)
     assert(!tuple.alive?)
   end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧]