summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2020-05-09 22:36:30 -0700
committerTakashi Kokubun <takashikkbn@gmail.com>2020-05-09 22:36:34 -0700
commita6f85899144607606c114e95104fa7e8ec8d95d9 (patch)
treea55395096200b3eb673b5b707f32ea92da919fc2 /test
parent18f22490e850c21f353fc6e74e16b1beb324dc65 (diff)
Workaround a zombie process created by Open3
with MJIT worker enabled The problem: ``` $ ruby -ropen3 --jit -e 'Open3.capture2e("cmake") rescue nil;binding.irb' irb(main)[01:0]> Process.waitall => [[10656, #<Process::Status: pid 10656 exit 127>]] $ ruby -ropen3 -e 'Open3.capture2e("cmake") rescue nil;binding.irb' irb(main)[01:0]> Process.waitall => [] ``` Not sure why it's happening yet, but first I'd like to prevent trunk-mjit-wait from failing like http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/2929075.
Diffstat (limited to 'test')
-rw-r--r--test/rubygems/test_gem_ext_cmake_builder.rb8
1 files changed, 8 insertions, 0 deletions
diff --git a/test/rubygems/test_gem_ext_cmake_builder.rb b/test/rubygems/test_gem_ext_cmake_builder.rb
index b3f9241a96..d056202cc0 100644
--- a/test/rubygems/test_gem_ext_cmake_builder.rb
+++ b/test/rubygems/test_gem_ext_cmake_builder.rb
@@ -14,6 +14,14 @@ class TestGemExtCmakeBuilder < Gem::TestCase
_, status = Open3.capture2e('cmake')
skip 'cmake not present' unless status.success?
rescue Errno::ENOENT
+ # Open3.capture2e with ENOENT with JIT enabled leaves a zombie process.
+ # TODO: avoid making the zombie on ENOENT with JIT
+ if defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled?
+ begin
+ Process.waitall
+ rescue Errno::ECHILD
+ end
+ end
skip 'cmake not present'
end