ruby-trunk-changes r43003 - r43008

今日は新しい RDoc で make rdoc に失敗していた不具合の修正の他は主に IO.select についてのドキュメントの追加がありました。これがドキュメントといえどなかなか重大な内容なのですが……。

akr:r43003 2013-09-21 12:50:54 +0900

IO.select の rdoc 用コメントに IO#read_nonblock で IO::WaitReadable や IO::WaitWritable が発生した時に IO.select の第1引数と第2引数のどちらに IO オブジェクトを渡して待つかを判定するのに使うサンプルを追記しています。 IO#read_nonblock なら IO::WaitReadable しか発生しなさそうな気がしますが、OpenSSL::SSL::SSLSocket の場合内部的には更にプロトコルが遮蔽されているため IO::WaitWritable が発生し得ること、また IO.select から返ってきても実際に read してみると読めずにブロックしてしまう可能性もある(生の IO ではない場合)についても追記しています。その他にも Linux では select(2) の第1引数に渡した file descriptor が読めるとして返ってきても実際に読めることを保証しない(!)という仕様らしく、IO.select と IO#read_nonblock を組み合わせた書きかたがベストだとしています。

nobu:r43004 2013-09-21 13:42:19 +0900

r43003 の rdoc 用コメントのインデントの修正。

nobu:r43005 2013-09-21 13:42:21 +0900

IO#advise の rdoc 用コメントのインデントや重複した "*" の削除など体裁の修正。

nobu:r43006 2013-09-21 14:15:17 +0900

RDoc 4.1.0.preview.1 で make rdoc すると拡張ライブラリで documented? が nil に対して呼ばれて例外が発生してエラーになってしまうので rdoc/constant.rb で is_alias_for に documented? を呼ぶ前にチェックを追加しています。

akr:r43007 2013-09-21 16:52:02 +0900

r43003 の IO.select の rdoc コメントに追加して、IO.select は readability の確認のためにバッファの内容をチェックしてバッファに内容があればシステムコールを呼ばずにすぐに返りますが、この挙動は引数に渡されたのが IO オブジェクトである時だけで、to_io で変換できる IO-like なオブジェクトの場合はバッファのチェックはされないことを追記しています。

nobu:r43008 2013-09-21 20:11:10 +0900

Process.spawn などで fork する際に子プロセスとの通信用に作る pipe に rb_fork_internal() で cloexec フラグを立てるのですが、 pipe は rb_pipe() で生成する時に常に cloexec フラグを立てて作成するようになっているので冗長だったので削除しています。 [ruby-core:56523] [Bug #8769]