From 33a17d48397518c2110be41ad8793705a701a7fe Mon Sep 17 00:00:00 2001 From: ngoto Date: Thu, 25 Jun 2015 12:42:07 +0000 Subject: * 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 --- test/-ext-/popen_deadlock/test_popen_deadlock.rb | 35 ++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 test/-ext-/popen_deadlock/test_popen_deadlock.rb (limited to 'test') diff --git a/test/-ext-/popen_deadlock/test_popen_deadlock.rb b/test/-ext-/popen_deadlock/test_popen_deadlock.rb new file mode 100644 index 0000000000..60ec6ccce4 --- /dev/null +++ b/test/-ext-/popen_deadlock/test_popen_deadlock.rb @@ -0,0 +1,35 @@ +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 -- cgit v1.2.3