[Ruby 1.9 - Bug #4943][Assigned] test/testunit/test_parallel.rb reports an Error on mswin/mingw

Issue #4943 has been reported by Usaku NAKAMURA.


Bug #4943: test/testunit/test_parallel.rb reports an Error on
mswin/mingw

Author: Usaku NAKAMURA
Status: Assigned
Priority: Low
Assignee: Usaku NAKAMURA
Category: core
Target version: 1.9.x
ruby -v: ruby 1.9.3dev (2011-06-29 trunk 32282) [x64-mswin64_100]

1.9.3のcode freezeまでになんとかなる気がしてないので備忘録として。

  1. Error:
    test_quit(TestParallel::TestParallelWorker):
    Errno::EPERM: Operation not permitted
    C:/Users/usa/ruby/test/testunit/test_parallel.rb:27:in kill' C:/Users/usa/ruby/test/testunit/test_parallel.rb:27:in rescue in
    teardown’
    C:/Users/usa/ruby/test/testunit/test_parallel.rb:20:in `teardown’

で、別にparallel testが悪いわけではなくて、なぜかProcess.killができないのが
問題なのですが、ミニマム再現ケースを作れない(つまり普段は成功する)ので
悩み中です。
なお、このテストに関しては95%くらいの再現率です(つまり稀には通る)。

細かく分解すると、win32/win32.cのkill()内で、OpenProcess()に成功した後で
TerminateProcess()がERROR_ACCESS_DENIEDとなっています。
普通は権限が足りなければOpenProcess()時に既にエラーになるはずなので、
かなり奇妙な現象と言えます。
また、対象プロセスの死亡タイミングかなんかの問題かと思って遅延とか
リトライとかも試してみたのですが、回避に至ってはいません。