Backport #3644
closedthread_win32.c / native_stop_timer_thread() がタイマースレッドの終了を待たずに帰ってきてしまう。
Description
=begin
はじめまして
以下の点、少し気になりましたので報告いたします。
thread_win32.c / native_stop_timer_thread() がタイマースレッドの終了を待た
ずに帰ってきてしまう。
thread_32.c 507 行目で定義されている native_thread_join() は
w32_wait_events() を呼び出す際に、待ち時間(第3パラメータ)に 0 を指定してい
るため、スレッドの終了を待たずに帰ってきてしまいます。INFINITE を指定すべ
きです。
native_thread_join() は私が見るかぎり、native_stop_timer_thread() からしか
呼び出されていないので、他への影響はないと思います。
--- thread_win32.c 2010-06-06 08:26:43.000000000
+++ thread_win32.c 2010-07-28 12:13:27.031424000
@@ -507,7 +507,7 @@
static void
native_thread_join(HANDLE th)
{
- w32_wait_events(&th, 1, 0, 0);
- w32_wait_events(&th, 1, INFINITE, 0);
}
win32 環境で ruby-1.9.2-rc2 ビルド中に miniruby.exe がまれにアクセス違反で
異常終了することがあります。インタプリタ終了時に呼び出される ruby_cleanup()
内では、rb_thread_stop_timer_thread() でタイマースレッドを停止してから
ruby_vm_destruct() で vm 構造体を破棄していますが、スレッド停止を待たずに
処理を続けてしまうため、プロセス終了直前にタイマースレッドに制御がわたって
しまうと、タイマースレッドが vm 構造体を参照してしまいアクセス違反が発生す
るようです。
=end
Updated by usa (Usaku NAKAMURA) almost 14 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
=begin
This issue was solved with changeset r28834.
権兵衛, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
=end
Updated by usa (Usaku NAKAMURA) almost 14 years ago
- Category set to core
- Status changed from Closed to Assigned
- Assignee set to yugui (Yuki Sonoda)
=begin
backportお願いします...
それはそれとして、これはとても素晴らしい報告でした。
どなたか存じませんが本当にありがとうございました。
RubyKaigiにいらっしゃるようでしたらお声をかけてくだされば
缶ジュースの1本くらいは奢ります。
=end
Updated by silov.e (権兵衛 名無し) almost 14 years ago
=begin
迅速な対応、ありがとうございます。
こちらこそ開発陣の皆様の努力には感謝の言葉もありません。
暑い日が続くようですので、体調にも気をつけてご自愛くださいませ。
田舎暮らしのうえ、ネット接続にも事欠くほどの困った状況ですので、
オフラインでもオンラインでもお会いすることはかないませんが。
=end
Updated by usa (Usaku NAKAMURA) over 13 years ago
- Status changed from Assigned to Closed
=begin
r28855でmameさんによってバックポートされたので閉じます。
ありがとうございました。
=end