diff options
author | Takashi Kokubun <takashikkbn@gmail.com> | 2020-05-09 22:36:30 -0700 |
---|---|---|
committer | Takashi Kokubun <takashikkbn@gmail.com> | 2020-05-09 22:36:34 -0700 |
commit | a6f85899144607606c114e95104fa7e8ec8d95d9 (patch) | |
tree | a55395096200b3eb673b5b707f32ea92da919fc2 | |
parent | 18f22490e850c21f353fc6e74e16b1beb324dc65 (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.
-rw-r--r-- | test/rubygems/test_gem_ext_cmake_builder.rb | 8 |
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 |