ruby-trunk-changes r62111 - r62123

今日は UnboundMethod#bind で作った Method の super_method が SEGV する不具合の修正や Windows での pipe を含む IO の reopen などでの不具合修正(?)などがありました。

usa: r62111 2018-01-30 21:03:28 +0900

r62098 で make showflags で BASERUBY を実行してバージョンを表示しようとしてましたが、BASERUBY がない場合などもあるので $(BASERUBY) の内容を表示するのみに留めています。

kazu: r62112 2018-01-30 21:13:47 +0900

空になってた spec/ruby/core/bignum/ と spec/ruby/core/fixnum/ のディレクトリを削除。

normal: r62113 2018-01-31 03:32:40 +0900

標準添付ライブラリ net/http の rdoc 用コメントに、接続を使いまわしたい時に Net::HTTP.stat のかわりに Net::HTTP.new を使って #finish で明示的に閉じろって書いてあるのですが、実際には各種リクエスト発行のメソッドは、接続がないとその都度ソケットを開いてリクエスト単位で閉じてしまうので、明示的に Net::HTTP#start (クラスメソッドではなくインスタンスメソッド)で開く必要もあったので、ドキュメントの記述を修正しています。 [ruby-core:84815] [Bug #14349]

svn: r62114 2018-01-31 03:32:41 +0900

version.h の日付更新。

normal: r62115 2018-01-31 04:35:12 +0900

UnboundMethod をインスタンスに bind して作った Method オブジェクトの super_method が SEGV することがある不具合を修正しています。 r60127 で UnboundMethod の super_method を修正した時に入ったバグみたいです。 [ruby-core:85231] [Bug #14421]

normal: r62116 2018-01-31 08:55:49 +0900

r58350 や r58362 のあたりで rb_funcall() の引数を静的に解析して rb_funcallv() に展開して最適化するようにした影響で clang で無害な余分な引数がコンパイルエラーになるというので引数の数のチェック条件を緩めています。うーん、まあでもビルドできなくなると困るというのはわかる。 [ruby-core:85266] [Bug #14425]

svn: r62117 2018-01-31 08:55:50 +0900

r62116 の新規追加ファイルの svn property 設定。

kazu: r62118 2018-01-31 09:19:33 +0900

vm_trace.c でいくつか rb_bug() で異常終了する時の関数名が間違ってたのを修正しています。

nobu: r62119 2018-01-31 13:02:17 +0900

テストで子プロセスを起動してそこで ruby スクリプトを実行する時のスクリプトをヒアドキュメントで書いているところで、インデント除去つきヒアドキュメントの begin と end というトークンを使ってエディタのインデントによる整形とつじつまがあるように騙すテクニックを使うようにしています。

nobu: r62120 2018-01-31 13:02:18 +0900

pipe_del_fptr() で linked list で管理してる pipe から指定の fptr を持つものを消す処理を自動変数にダミーの先頭ノードを作るようにして分岐を減らしてシンプルにしています。よくあるテクニックですね。

nobu: r62121 2018-01-31 13:24:57 +0900

pipe_add_fptr() だと pipe_list の linked list に同じ fptr のエントリが重複して追加される可能性があり、解放済みのポインタに再度アクセスして SEGV する恐れがあったので pipe_register_fptr() という重複して挿入しないチェックつき関数を追加して、io_reopen() および rb_io_init_copy() からはこちらを呼ぶようにしています。

hsbt: r62122 2018-01-31 15:41:10 +0900

doc/maintainers.rdoc の標準添付ライブラリ csv のメンテナを jeg2 から mrkn と kou の 2人に変更しています。おお。

nobu: r62123 2018-01-31 17:17:16 +0900

r62121 の続きというか再修正みたいで、IO#reopen や IO#initialize_copy で IO オブジェクトの fd をつけかえる時に元の fd が pipe で新しい fd が pipe でない時は追加し、その逆だったらリストから削除する、というようにしています。いずれにせよさっきは見逃がしてましたが pipe_list の管理は Windows 向けの対処みたいですね。