mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
merge revision(s) 44616,44622,44623,44626,44632,44636:
add timeout to test_do_reply http://fb64b.rubyci.org/~chkbuild/ruby-trunk/log/20140115T073301Z.log.html.gz git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@45085 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
b376132317
commit
adfa331bbc
2 changed files with 54 additions and 6 deletions
|
@ -4,7 +4,7 @@ require 'drb/drb'
|
|||
require 'drb/eq'
|
||||
require 'rinda/ring'
|
||||
require 'rinda/tuplespace'
|
||||
|
||||
require 'timeout'
|
||||
require 'singleton'
|
||||
|
||||
module Rinda
|
||||
|
@ -559,6 +559,10 @@ class TestRingServer < Test::Unit::TestCase
|
|||
end
|
||||
|
||||
def test_do_reply
|
||||
with_timeout(10) {_test_do_reply}
|
||||
end
|
||||
|
||||
def _test_do_reply
|
||||
called = nil
|
||||
|
||||
callback = proc { |ts|
|
||||
|
@ -571,12 +575,16 @@ class TestRingServer < Test::Unit::TestCase
|
|||
|
||||
@rs.do_reply
|
||||
|
||||
Thread.pass until called
|
||||
wait_for(10) {called}
|
||||
|
||||
assert_same @ts, called
|
||||
end
|
||||
|
||||
def test_do_reply_local
|
||||
with_timeout(10) {_test_do_reply_local}
|
||||
end
|
||||
|
||||
def _test_do_reply_local
|
||||
called = nil
|
||||
|
||||
callback = proc { |ts|
|
||||
|
@ -587,7 +595,7 @@ class TestRingServer < Test::Unit::TestCase
|
|||
|
||||
@rs.do_reply
|
||||
|
||||
Thread.pass until called
|
||||
wait_for(10) {called}
|
||||
|
||||
assert_same @ts, called
|
||||
end
|
||||
|
@ -674,6 +682,46 @@ class TestRingServer < Test::Unit::TestCase
|
|||
assert_nil(@rs.do_reply, 'otherwise should hang forever')
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def with_timeout(n)
|
||||
aoe = Thread.abort_on_exception
|
||||
Thread.abort_on_exception = true
|
||||
tl0 = Thread.list
|
||||
tl = nil
|
||||
th = Thread.new(Thread.current) do |mth|
|
||||
sleep n
|
||||
(tl = Thread.list - tl0).each {|t|t.raise(Timeout::Error)}
|
||||
mth.raise(Timeout::Error)
|
||||
end
|
||||
tl0 << th
|
||||
rescue Timeout::Error => e
|
||||
if tl
|
||||
bt = e.backtrace
|
||||
tl.each do |t|
|
||||
begin
|
||||
t.value
|
||||
rescue Timeout::Error => e
|
||||
bt.unshift("")
|
||||
bt[0, 0] = e.backtrace
|
||||
end
|
||||
end
|
||||
end
|
||||
raise Timeout::Error, "timeout", bt
|
||||
ensure
|
||||
th.kill if th
|
||||
Thread.abort_on_exception = aoe
|
||||
end
|
||||
|
||||
def wait_for(n)
|
||||
t = n + Process.clock_gettime(Process::CLOCK_MONOTONIC, :second)
|
||||
until yield
|
||||
if t < Process.clock_gettime(Process::CLOCK_MONOTONIC, :second)
|
||||
flunk "timeout during waiting call"
|
||||
end
|
||||
sleep 0.1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class TestRingFinger < Test::Unit::TestCase
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
#define RUBY_VERSION "2.1.1"
|
||||
#define RUBY_RELEASE_DATE "2014-02-21"
|
||||
#define RUBY_PATCHLEVEL 47
|
||||
#define RUBY_RELEASE_DATE "2014-02-22"
|
||||
#define RUBY_PATCHLEVEL 48
|
||||
|
||||
#define RUBY_RELEASE_YEAR 2014
|
||||
#define RUBY_RELEASE_MONTH 2
|
||||
#define RUBY_RELEASE_DAY 21
|
||||
#define RUBY_RELEASE_DAY 22
|
||||
|
||||
#include "ruby/version.h"
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue