ruby-trunk-changes r51205 - r51213

今日は spawn 時の timer thread の扱いの変更や、標準添付ライブラリ timeout でデフォルトで利用する例外クラスを以前のものに戻す修正などがありました。

nobu: r51205 2015-07-10 10:22:55 +0900

ext/extmk.rb で拡張ライブラリのうち "-xxx-" のような名前をもつものはテスト用でインストールしないので失敗時のエラーメッセージの出力をスキップするようにしています。

svn: r51206 2015-07-10 10:23:06 +0900

version.h の日付更新。

nobu: r51207 2015-07-10 10:46:04 +0900

拡張ライブラリ stringio にて StringIO が内部的にバッファとして使っている String オブジェクトの tainted のチェックの空の分岐を削っています。 $SAFE=4 の廃止の時に内容だけ削って if 文だけ残ってたようです。コンパイルすると最適化で消えてたでしょうけど。 https://github.com/ruby/ruby/pull/963

nobu: r51208 2015-07-10 17:41:57 +0900

Dir#glob などでファイルシステムが大文字小文字を区別するかどうかの判定をするために fstatfs(3) と getattrlist(2) を使ってそのディレクトリが所属するマウントポイントからファイルシステムを取得していたのを、fgetattrlist(2) を使って直接ディレクトリの fd から情報を取得するようにしています。

ngoto: r51209 2015-07-10 20:27:43 +0900

r51146 で追加された Kernel#exec で fd=3 のリダイレクトを指定するオプションのテストが Solaris で失敗していたのを修正しています。 rb_exec_without_timer_thread() を使って timer thread を殺して exec する処理は OS XHaiku という OS でのみ有効になっていましたが、全てのプラットフォームでこの戦略を取るようにしています。r36009 で Leopard 以前の Mac OS X だとプロセスに複数のスレッドがいる状態で fork(2) を呼ぶと ENOTSUPP がかえるのでタイマースレッドも一時的に止めるようにして、後に Haiku も同様のケアをするようにしていましたが、こうすると fd=3 のリダイレクト時にタイマースレッドがイベントを受け取ってしまう可能性があるので、常に止めないといけないということみたいです。うーん、なんかタイマースレッドを止めるとそれはそれでレースコンディションがあったみたいなことがあったような気もしますが、なんだっけ…。signal まわりかな。 [ruby-core:69886] [Bug #11336]

nobu: r51210 2015-07-10 21:49:55 +0900

tool/rbinstall.rb で --with-mantype 引数に "man.gz", "man.bz2", "doc.gz", "doc.bz2" などの圧縮方式を指定する拡張子つきのタイプを指定して、man を圧縮してインストールできるようにしています。

nobu: r51211 2015-07-10 21:49:58 +0900

拡張ライブラリ zlib で関数の定義部分で引数の宣言の書きかたが K&R style になっていたのを修正しています。またかっこの位置のスタイルなども変更しています。

nobu: r51212 2015-07-10 21:50:26 +0900

拡張ライブラリ zlib で変数に volatile 修飾子をつけてたのを RB_GC_GUARD() による最適化保護に切り替えています。

nobu: r51213 2015-07-10 22:05:53 +0900

r42690 とか r42710 のあたりで([Bug #8730]) 標準添付ライブラリ timeout でタイムアウトを通知するために例外のかわりに catch-throw を使うようにしたのですが、そのために Timeout::ExitException というのを導入して、この例外クラスは発生させようとすると実際には throw を実行するようになっていたのですが、この機能を Timeout::Error にまとめています。 Thread.handle_interrupt(TimeoutError => :never) でブロック内でタイムアウトの割り込みを抑制できるという記述がるりまにあるのに、実際には Timeout::ExitException が利用されていたので、ドキュメントのほうに合わせるようにしているようです。 [ruby-dev:49179] [Bug #11344]