ruby-trunk-changes r47413 - r47438

今日は process.c の fork/exec 関連のリファクタリングや rake のバージョン更新などがありました。

kazu: r47413 2014-09-06 00:03:58 +0900

r47385 と r47396 の ChangeLog エントリの typo 修正。

svn: r47414 2014-09-06 00:04:16 +0900

version.h の日付更新。

akr: r47417 2014-09-06 00:50:24 +0900

ruby_signal() で sigaction(3) でシグナルハンドラを設定する時に SIG_IGN と SIG_DFL に設定する時に flags に SA_SIGINFO をセットしないようにしています。 SA_SIGINFO はシグナルハンドラ関数のインタフェースを指定する(3引数あることを教える)ものですが、SIG_IGN と SIG_DFL の設定の時はシグナルハンドラ関数は渡していないので。

akr: r47420 2014-09-06 01:10:16 +0900

r47386 からの一連の変更で追加した has_privilege() で特に必要ないのにブロックをネストさせていたところを展開しています。

akr: r47421 2014-09-06 01:36:35 +0900

rb_exec_async_signal_safe() の中で before_exec_async_signal_safe() と(エラー時に) after_exec_async_signal_safe() を呼んでいたのをやめて、rb_exec_async_signal_safe() の呼び出し側の前後で呼ぶようにしています。また fork した子プロセスでシグナルハンドラをリセットする disable_child_handler_fork_child() で SIGPIPE だけは元のハンドラに戻すようにしています。エラー時などに親プロセスにエラー内容を渡すために pipe に書き込みをするからですかね。

normal: r47422 2014-09-06 07:49:29 +0900

r47178 と r47353 の続き。 test/ruby/test_io.rb の readpartial のテストで EBADF が稀に発生するのについての対策として rescue で捕捉していたのをより狭い範囲でのみ捕捉することで他の例外まで握り潰してしまわないようにしています。 [ruby-core:64773] [ruby-core:64775]

normal: r47423 2014-09-06 08:11:15 +0900

r47422 と同じく readpartial のテストで NONBLOCK フラグを追加するのに IO#fcntl を使っていたのを IO#nonblock= を利用するようにしています。

nobu: r47424 2014-09-06 08:45:11 +0900

r47421 の変更で関数マクロ呼び出しのあとにセミコロンがなくてビルドエラーになっていた(Mac OS XHaiku で)ので修正しています。

zzak: r47425 2014-09-06 08:46:11 +0900

標準添付ライブラリ rdoc に含まれている jQuery のバージョンを更新しています。 https://github.com/jquery/jquery/pull/474 https://github.com/ruby/ruby/pull/711

nobu: r47431 2014-09-06 11:08:45 +0900

メソッドの引数に正規表現リテラルをかっこなしで書いた時に、"ambiguous first argument; put parentheses or even spaces" という警告が出るのですが、これは問題となっている演算子とみなせる記号の"後に"空白を入れなさいという意味なので、そのように警告メッセージを修正しています。 [ruby-core:64790] [Bug #10204]

suke: r47432 2014-09-06 16:52:04 +0900

拡張ライブラリ win32ole で WIN32OLE::VARIANT のエラーを表現するオブジェクトでエラーコードも持てるようにしています。

hsbt: r47433 2014-09-06 18:31:37 +0900

標準添付ライブラリ rake を最新版(e47d023)に更新しています。 変更点は History.rdoc を参照してください。

svn: r47434 2014-09-06 18:31:52 +0900

r47433 で追加した空ファイル lib/rake/contrib/.document に改行を追加しています。テキストファイルの末尾は改行で終わらないといけないので、そのチェックのための bot が反応してしまったみたいですね。

svn: r47435 2014-09-06 18:31:58 +0900

同じく r47433 で追加されたファイルの svn property 設定。

akr: r47436 2014-09-06 19:27:54 +0900

r47412 で導入した disable_child_handler_before_fork()、disable_child_handler_fork_parent()、disable_child_handler_fork_child() の引数の sigset_t のかわりに struct child_handler_disabler_state という構造体を定義して使うようにしています。 ただこの構造体の内容は sigset_t だけなので実質的には(まだ)変化ありません。

akr: r47437 2014-09-06 20:20:08 +0900

r43436 で導入した構造体 struct child_handler_disabler_state に cancelstate というメンバを追加して、pthread_setcancelstate() を使って pthread の cancelstate も一時的にクリアして親プロセスでは復旧させるようにしています。pthread_cancel() を使った時の挙動についての設定だと思います。pthread_cancel() は ruby 本体では使ってないと思いますけどね。

akr: r47438 2014-09-06 21:08:02 +0900

r47386 で追加した has_privilege() で egid が 0 の時に権限変更ありと判定していたのをやめています。やっぱり 0 特別扱いしてたのは root ユーザを特別扱いするためだったっぽいですね。