dubstep
December 27, 2011, 1:14am
1
Issue #5812 has been reported by Usaku NAKAMURA.
Bug #5812: test-all is stuck on Windows
Author: Usaku NAKAMURA
Status: Assigned
Priority: Normal
Assignee: Usaku NAKAMURA
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2011-12-26 trunk 34131) [x64-mswin64_100]
以下の2つのテストがWindowsで刺さります。
test/ruby/test_thread.rb TestThreadGroup#test_thread_timer_and_interrupt
test/thread/test_queue.rb TestQueue#test_thr_kill
要するにIO#read中にThread#killしても終わらないことがあるというわけですが、
しばらく頑張ってみたものの(thread_pthread.cからsignal_thread_listの仕組みを
持ってきてみるとか)修正できていないので、忘れないようにチケット化しておきます。
このままだと越年コース。
ちなみにtrunkのみならず1.9系全般で起きています。
今までテストがなかったのがいけないんですな。
Issue #5812 has been updated by Hiroshi Shirosaki.
File thread_signal.patch added
Windowsのtest-allのパッチを作ってみました。検討をお願いします。
TestThreadGroup#test_thread_timer_and_interrupt
GenerateConsoleCtrlEventのCTRL_C_EVENTで0でないprocess groupを指定した場合は、CTRL+C
signalは無視されるようです。
Generates a CTRL+C signal. This signal cannot be generated for process
groups. If dwProcessGroupId is nonzero, this function will succeed, but
the CTRL+C signal will not be received by processes within the specified
process group.
かわりに、CTRL_BREAK_EVENTにして、process groupを指定するようにしました。
CTRL_BREAK_EVENTもSIGINTに対応するのではないかというコメントがありました。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/18096
s.exited?, s.signaled?, s.stopped?
は、windowsではunixのように取れないようなので、その部分のテストを修正しました。
http://bugs.ruby-lang.org/projects/ruby-trunk/repository/entry/win32/win32.c#L3893
if (stat_loc) *stat_loc = exitcode << 8;
statusの下位8bitは常に0になるように見えます。
TestQueue#test_thr_kill
Thread.newの中のreadのrb_w32_wait_events_blockingを実行した時、GET_THREAD()でmain
threadが取れることがあります。
そのため、killに反応しないようです。
かわりにruby_thread_from_native()を使った場合は、うまく動作しました。
他のGET_THREAD()もruby_thread_from_native()に変えてみました。
ruby -e '$stdin.read’としたとき、CTRL-Cを押してもrubyが終了しません。
CTRL-Cを2回押すか、CTRL-C + Enterだと終了します。
これはテストにはないのですが、test_thread_timer_and_interruptと関連するのではないかと思います。
CTRL-Cを押したとき、ReadFileのエラーで、ERROR_OPERATION_ABORTEDになるので、そのときはretryしないようにしました。
trunkにこのパッチを当てて、mingw on Windows7でmake test, make test-allを確認しました。
make testは成功、make test-allのエラーは増えていませんでした。
Bug #5812: test-all is stuck on Windows
Author: Usaku NAKAMURA
Status: Assigned
Priority: Normal
Assignee: Usaku NAKAMURA
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2011-12-26 trunk 34131) [x64-mswin64_100]
以下の2つのテストがWindowsで刺さります。
test/ruby/test_thread.rb TestThreadGroup#test_thread_timer_and_interrupt
test/thread/test_queue.rb TestQueue#test_thr_kill
要するにIO#read中にThread#killしても終わらないことがあるというわけですが、
しばらく頑張ってみたものの(thread_pthread.cからsignal_thread_listの仕組みを
持ってきてみるとか)修正できていないので、忘れないようにチケット化しておきます。
このままだと越年コース。
ちなみにtrunkのみならず1.9系全般で起きています。
今までテストがなかったのがいけないんですな。
Issue #5812 has been updated by Usaku NAKAMURA.
すばらしい!
commitしてください。
Bug #5812: test-all is stuck on Windows
Author: Usaku NAKAMURA
Status: Assigned
Priority: Normal
Assignee: Usaku NAKAMURA
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2011-12-26 trunk 34131) [x64-mswin64_100]
以下の2つのテストがWindowsで刺さります。
test/ruby/test_thread.rb TestThreadGroup#test_thread_timer_and_interrupt
test/thread/test_queue.rb TestQueue#test_thr_kill
要するにIO#read中にThread#killしても終わらないことがあるというわけですが、
しばらく頑張ってみたものの(thread_pthread.cからsignal_thread_listの仕組みを
持ってきてみるとか)修正できていないので、忘れないようにチケット化しておきます。
このままだと越年コース。
ちなみにtrunkのみならず1.9系全般で起きています。
今までテストがなかったのがいけないんですな。