summaryrefslogtreecommitdiff
path: root/test/-ext-/popen_deadlock
diff options
context:
space:
mode:
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