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