Project

General

Profile

Actions

Backport #3644

closed

thread_win32.c / native_stop_timer_thread() がタイマースレッドの終了を待たずに帰ってきてしまう。

Added by silov.e (権兵衛 名無し) almost 14 years ago. Updated over 12 years ago.

Status:
Closed
[ruby-dev:41911]

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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0