summaryrefslogtreecommitdiff
path: root/test/-ext-/popen_deadlock
diff options
context:
space:
mode:
authorngoto <ngoto@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-06-25 12:42:07 +0000
committerngoto <ngoto@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-06-25 12:42:07 +0000
commit33a17d48397518c2110be41ad8793705a701a7fe (patch)
tree89b3058f989dc8e79b490b03d614efcac13a92fa /test/-ext-/popen_deadlock
parentd47a2b571296b9e726531f61690010eb1fa3d402 (diff)
* 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
Diffstat (limited to 'test/-ext-/popen_deadlock')
-rw-r--r--test/-ext-/popen_deadlock/test_popen_deadlock.rb35
1 files changed, 35 insertions, 0 deletions
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