1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/-ext-/popen_deadlock/test_popen_deadlock.rb
ngoto 33a17d4839 * test/-ext-/popen_deadlock/test_popen_deadlock.rb: test [Bug #11265]
* ext/-test-/popen_deadlock/infinite_loop_dlsym.c: new ext to call
  dlsym(3) infinitely without GVL, used in the above test.
  
* ext/-test-/popen_deadlock/extconf.rb: extconf.rb for the above
  ext. Currently, only enabled on Solaris (main target) and Linux
  (as a reference platform and for debugging the ext).


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51030 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-06-25 12:42:07 +00:00

35 lines
893 B
Ruby

begin
require '-test-/popen_deadlock/infinite_loop_dlsym'
rescue LoadError
skip = true
end
class TestPopenDeadlock < Test::Unit::TestCase
# [Bug #11265]
def assert_popen_without_deadlock
assert_separately([], <<-"end;", timeout: 90) #do
require '-test-/popen_deadlock/infinite_loop_dlsym'
bug = '11265'.freeze
begin
t = Thread.new {
Thread.current.__infinite_loop_dlsym__("_ex_unwind")
}
str = IO.popen([ 'echo', bug ], 'r+') { |io| io.read }
assert_equal(bug, str.chomp)
ensure
t.kill if t
end
end;
end
private :assert_popen_without_deadlock
# 10 test methods are defined for showing progess reports
10.times do |i|
define_method("test_popen_without_deadlock_#{i}") {
assert_popen_without_deadlock
}
end
end unless skip #class TestPopenDeadlock