今日は process.c の fork/exec 関連のリファクタリングや rake のバージョン更新などがありました。
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 X と Haiku で)ので修正しています。
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 ユーザを特別扱いするためだったっぽいですね。