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

ruby-changes:22553

From: naruse <ko1@a...>
Date: Wed, 15 Feb 2012 05:04:25 +0900 (JST)
Subject: [ruby-changes:22553] naruse:r34602 (ruby_1_9_3): merge revision(s) 32705,32717: [Backport #6016]

naruse	2012-02-15 05:04:06 +0900 (Wed, 15 Feb 2012)

  New Revision: 34602

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=34602

  Log:
    merge revision(s) 32705,32717: [Backport #6016]
    
    * test/rinda/test_rinda.rb (test_remote_array_and_hash):
      add local variables to protect objects from GC. [ruby-dev:44253]
      [Bug #5104]
    
    * test/rinda/test_rinda.rb: decrease the code that depends on timing.
      [Bug #372] [Bug #4160]

  Modified files:
    branches/ruby_1_9_3/ChangeLog
    branches/ruby_1_9_3/test/rinda/test_rinda.rb
    branches/ruby_1_9_3/version.h

Index: ruby_1_9_3/ChangeLog
===================================================================
--- ruby_1_9_3/ChangeLog	(revision 34601)
+++ ruby_1_9_3/ChangeLog	(revision 34602)
@@ -1,3 +1,14 @@
+Wed Feb 15 05:03:41 2012  Masatoshi SEKI  <m_seki@m...>
+
+	* test/rinda/test_rinda.rb: decrease the code that depends on timing.
+	  [Bug #372] [Bug #4160]
+
+Wed Feb 15 05:03:41 2012  CHIKANAGA Tomoyuki  <nagachika00@g...>
+
+	* test/rinda/test_rinda.rb (test_remote_array_and_hash):
+	  add local variables to protect objects from GC. [ruby-dev:44253]
+	  [Bug #5104]
+
 Wed Feb 15 05:02:43 2012  Masaki Suketa <masaki.suketa@n...>
 
 	* test/win32ole/test_err_in_callback.rb (test_err_in_callback): 
Index: ruby_1_9_3/version.h
===================================================================
--- ruby_1_9_3/version.h	(revision 34601)
+++ ruby_1_9_3/version.h	(revision 34602)
@@ -1,5 +1,5 @@
 #define RUBY_VERSION "1.9.3"
-#define RUBY_PATCHLEVEL 112
+#define RUBY_PATCHLEVEL 113
 
 #define RUBY_RELEASE_DATE "2012-02-15"
 #define RUBY_RELEASE_YEAR 2012
Index: ruby_1_9_3/test/rinda/test_rinda.rb
===================================================================
--- ruby_1_9_3/test/rinda/test_rinda.rb	(revision 34601)
+++ ruby_1_9_3/test/rinda/test_rinda.rb	(revision 34602)
@@ -269,37 +269,29 @@
     assert_equal([[:req, 2], [:req, 2], [:req, 2], [:req, 2], [:req, 2]],
 		 @ts.read_all([nil, nil]))
 
-    taker = Thread.new do
+    taker = Thread.new(5) do |count|
       s = 0
-      while true
-	begin
-	  tuple = @ts.take([:req, Integer], 1)
-	  assert_equal(2, tuple[1])
-	  s += tuple[1]
-	rescue Rinda::RequestExpiredError
-	  break
-	end
+      count.times do
+        tuple = @ts.take([:req, Integer])
+        assert_equal(2, tuple[1])
+        s += tuple[1]
       end
       @ts.write([:ans, s])
       s
     end
 
     assert_equal(10, thread_join(taker))
-    tuple = @ts.take([:ans, nil])
-    assert_equal(10, tuple[1])
+    assert_equal([:ans, 10], @ts.take([:ans, 10]))
+    assert_equal([], @ts.read_all([nil, nil]))
   end
 
   def test_core_02
-    taker = Thread.new do
+    taker = Thread.new(5) do |count|
       s = 0
-      while true
-	begin
-	  tuple = @ts.take([:req, Integer], 1)
-	  assert_equal(2, tuple[1])
-	  s += tuple[1]
-	rescue Rinda::RequestExpiredError
-	  break
-	end
+      count.times do
+        tuple = @ts.take([:req, Integer])
+        assert_equal(2, tuple[1])
+        s += tuple[1]
       end
       @ts.write([:ans, s])
       s
@@ -310,22 +302,20 @@
     end
 
     assert_equal(10, thread_join(taker))
-    tuple = @ts.take([:ans, nil])
-    assert_equal(10, tuple[1])
+    assert_equal([:ans, 10], @ts.take([:ans, 10]))
     assert_equal([], @ts.read_all([nil, nil]))
   end
 
   def test_core_03_notify
     notify1 = @ts.notify(nil, [:req, Integer])
-    notify2 = @ts.notify(nil, [:ans, Integer], 8)
-    notify3 = @ts.notify(nil, {"message"=>String, "name"=>String}, 8)
+    notify2 = @ts.notify(nil, {"message"=>String, "name"=>String}, 8)
 
     @ts.write({"message"=>"first", "name"=>"3"}, 3)
     @ts.write({"message"=>"second", "name"=>"1"}, 1)
     @ts.write({"message"=>"third", "name"=>"0"})
     @ts.take({"message"=>"third", "name"=>"0"})
 
-    listener1 = Thread.new do
+    listener = Thread.new do
       lv = 0
       n = 0
       notify1.each  do |ev, tuple|
@@ -343,35 +333,12 @@
       [lv, n]
     end
 
-    listener2 = Thread.new do
-      result = nil
-      lv = 0
-      n = 0
-      notify2.each do |ev, tuple|
-	n += 1
-	if ev == 'write'
-	  lv = lv + 1
-	elsif ev == 'take'
-	  lv = lv - 1
-	elsif ev == 'close'
-	  result = [lv, n]
-	  break
-	end
-	assert(lv >= 0)
-	assert_equal([:ans, 10], tuple)
-      end
-      result
-    end
-
-    taker = Thread.new do
+    taker = Thread.new(5) do |count|
       s = 0
-      while true
-	begin
-	  tuple = @ts.take([:req, Integer], 1)
-	  s += tuple[1]
-	rescue Rinda::RequestExpiredError
-	  break
-	end
+      count.times do
+        tuple = @ts.take([:req, Integer])
+        assert_equal(2, tuple[1])
+        s += tuple[1]
       end
       @ts.write([:ans, s])
       s
@@ -383,19 +350,14 @@
 
     @ts.take({"message"=>"first", "name"=>"3"})
 
-    sleep(4)
     assert_equal(10, thread_join(taker))
-    # notify2 must not expire until this @ts.take.
-    # sleep(4) might be short enough for the timeout of notify2 (8 secs)
-    tuple = @ts.take([:ans, nil])
-    assert_equal(10, tuple[1])
+    assert_equal([:ans, 10], @ts.take([:ans, 10]))
     assert_equal([], @ts.read_all([nil, nil]))
 
     notify1.cancel
-    sleep(7) # notify2 expired (sleep(4)+sleep(7) > 8)
+    sleep(8)
 
-    assert_equal([0, 11], thread_join(listener1))
-    assert_equal([0, 3], thread_join(listener2))
+    assert_equal([0, 11], thread_join(listener))
 
     ary = []
     ary.push(["write", {"message"=>"first", "name"=>"3"}])
@@ -406,7 +368,7 @@
     ary.push(["delete", {"message"=>"second", "name"=>"1"}])
     ary.push(["close"])
 
-    notify3.each do |ev|
+    notify2.each do |ev|
       assert_equal(ary.shift, ev)
     end
     assert_equal([], ary)
@@ -539,9 +501,13 @@
   end
 
   def test_remote_array_and_hash
-    @ts.write(DRbObject.new([1, 2, 3]))
+    # Don't remove ary/hsh local variables.
+    # These are necessary to protect objects from GC.
+    ary = [1, 2, 3]
+    @ts.write(DRbObject.new(ary))
     assert_equal([1, 2, 3], @ts.take([1, 2, 3], 0))
-    @ts.write(DRbObject.new({'head' => 1, 'tail' => 2}))
+    hsh = {'head' => 1, 'tail' => 2}
+    @ts.write(DRbObject.new(hsh))
     assert_equal({'head' => 1, 'tail' => 2},
                  @ts.take({'head' => 1, 'tail' => 2}, 0))
   end

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

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