ruby-trunk-changes r64536 - r64541

今日は Signal.trap のハンドラの実行漏れの修正のための main thread の sleep 方法の変更などがありました。

normal: r64536 2018-08-26 06:33:55 +0900

r64533 で導入した rb_hrtime_t の操作関数 hrtime_update_expire() が gcc7 だと未初期化変数の警告が出てしまうということで #pragma で局所的に警告のオプション -Wmaybe-uninitialized をオフにするようにしています。

svn: r64537 2018-08-26 06:33:55 +0900

version.h の日付更新。

normal: r64538 2018-08-26 06:59:30 +0900

native_sleep() でその thread が main thread だったら pthread_cond_wait() による待ちではなく ppoll(2) を使うようにしています。詳しくはコメントやコミットログにシナリオがありますが、シグナル受信を各 thread が受け持つようになったために main thread が sigmask をかけた状態で他の thread が終了してしまった状態でシグナル受信するとちゃんとハンドラが実行されなくなってしまう可能性があったというのでこうしてるそうです。ううーむなるほど?

normal: r64539 2018-08-26 07:14:14 +0900

ubf_wakeup_thread() で引数の th が NULL になることはないということでチェックの分岐を削っています。まあ NULL がきたとしたら分岐の前の thread_debug() の文字列フォーマットの時点で NG ですしね(もっとも thread_debug() はデバッグ出力を有効にしてないと引数に触らないので実はスルーされてるだろうけど…)。

normal: r64540 2018-08-26 07:32:35 +0900

io/wait のテストで各種デバイスファイルのチェックをしてるところで /dev/random のチェックでは IO#wait_readable が書き込み可能と返さなくても例外が発生しなければよし、と判定するように緩めています。エントロピー枯渇時でもテストできるように、ということでしょう。

normal: r64541 2018-08-26 13:29:11 +0900

いつのまにか意味をなさなくなっていた process.c の waitpid_sys() というマクロ定義を削除しています。使っているところは呼び元の条件によって do_waitpid() 呼び出しと分岐してましたが、waitpid_sys() も単に do_waitpid() の wrapper なので分岐の意味がなくなってました。