Hatena::ブログ(Diary)

PB memo このページをアンテナに追加 RSSフィード

2015-06-29 ruby-trunk-changes r51056 - r51063

[][]ruby-trunk-changes r51056 - r51063

今日は net/http の Content-Encoding ヘッダの大文字対応などがありました。

nobu: r51056 2015-06-29 07:24:05 +0900

拡張ライブラリ rbconfig/sizeof で int8_t/int16_t/int32_t/int64_t および intptr_t のサイズチェックを mkmf.rb の check_sizeof を利用していたのを configure.in から RUBY_DEFINT() を拝借して利用するようにしています。差がよくわかりませんが(というか configure.in 読めない) universal binary 対応しているそうです。

hsbt: r51057 2015-06-29 12:09:14 +0900

README.md の英文法の修正や空白の挿入など。 https://github.com/ruby/ruby/pull/945

nobu: r51058 2015-06-29 12:43:21 +0900

標準添付ライブラリ mkmf.rb の check_sizeof と what_type でチェックのために生成する C ソースで警告除去のため不要な static 修飾子を削除しています。

shugo: r51060 2015-06-29 14:52:38 +0900

Module#refine の実装で有効になっている refinements へ追加する eval.c の add_activated_refinement() で superclass を辿る処理で refinement が対象の klass と一致したらループから抜けるようにしています。うーむ、Module にその Module 自体を refine するとおきるのかな、と思ったけど Module の refine はできなかったような。

naruse: r51061 2015-06-29 16:14:31 +0900

標準添付ライブラリ net/http でレスポンスヘッダの Content-Encoding の内容の大文字小文字を無視して処理するように downcase してから処理するようにしています。 [ruby-core:69670] [Bug #11285]

nobu: r51062 2015-06-29 17:38:04 +0900

insns.def の defineclass 命令の例外メッセージの PRIsVALUE での埋め込みで、表示できないコントロール文字? のクオートをやめるように空白文字の指示子(っていうんでしたっけ?)を削除しています。

naruse: r51063 2015-06-29 19:04:33 +0900

r51061 の再修正。レスポンスヘッダの Content-Encoding が存在しなかった時に NoMethodError になるので対応しています。 [ruby-core:69670] [Bug #11285]

2015-06-28 ruby-trunk-changes r51048 - r51055

[][]ruby-trunk-changes r51048 - r51055

今日は主に class/module 文での例外メッセージのエンコーディング保持の修正でした。

nobu: r51048 2015-06-28 12:07:37 +0900

rb_define_class_id_under() でネストしたクラス定義で継承元を替えて再定義しようとした時の例外が NameError だったので TypeError を raise するように修正しています。

svn: r51049 2015-06-28 12:07:51 +0900

version.h の日付更新。

nobu: r51050 2015-06-28 12:28:50 +0900

class 文で既に定義済みの Class継承元が異なる場合の例外で PRIsVALUE を用いてクラス名を埋め込み、エンコーディングを保持するようにしています。

nobu: r51051 2015-06-29 01:35:58 +0900

Class/Module でない定数を class/module 文で定義しようとした時の例外発生を確認するテストを追加しています。

svn: r51052 2015-06-29 01:37:10 +0900

version.h の日付更新。

nobu: r51053 2015-06-29 02:06:59 +0900

defineclass 命令で class/module 文で指定された定数が既に Class/Module 以外で初期化されてた時の例外メッセージに定数名を PRIsVALUE で埋め込むようにしてエンコーディングを保持するようにしています。

nobu: r51054 2015-06-29 02:10:00 +0900

継承つきの class 文で継承元として指定されたものが Class でなかった時の例外メッセージでも PRIsVALUE を使ってクラス名を埋め込むようにしてエンコーディングを保持するようにしています。

nobu: r51055 2015-06-29 02:10:26 +0900

defineclass 命令で class 文の継承元クラスが既に定義済みのものと違っていた時の例外メッセージに PRIsVALUE で埋め込むようにしてエンコーディングを保持するようにしています。

2015-06-27 ruby-trunk-changes r51041 - r51046

[][]ruby-trunk-changes r51041 - r51046

今日は Net::FTP の socket リークの修正がありました。昨日の st_table の ccan/list 利用のリベンジもあったのですが、またビルド失敗で revert されました。

normal: r51041 2015-06-27 03:59:59 +0900

r51034 で st_table のリスト管理に ccan の list 実装を利用したらビルドエラーが発生したのが common.mk の更新不足にあったのではないかということで、まず st.c に #include "ccan/list/list.h" を追加して様子を見ています。

svn: r51042 2015-06-27 04:01:47 +0900

version.h の日付更新。

normal: r51043 2015-06-27 05:19:15 +0900

r51034 のリベンジの続き common.mk に st.c の依存関係に ccan のヘッダ群を追加しています。 多分 tool/update-deps を使ってるんでしょうね。このためにまず r51041 で #include を追加したのかな。

normal: r51044 2015-06-27 07:32:06 +0900

r51034 の st_table の linked list 実装の ccan/list を利用した変更のリベンジ。ところが… [ruby-core:69726] [misc #10278]

normal: r51045 2015-06-27 07:52:26 +0900

r51044 を revert しています。やはり CI でのビルド(多分 Windows 版)に失敗してしまったそうです。ふーむ。

しかしヘッダと依存関係の追加は残ったままですね。

eregon: r51046 2015-06-27 19:10:54 +0900

標準添付ライブラリ net/ftp で Net::FTP#makeport で TCPServer を開いて PORT/EPRT コマンドで @sock に書きこみを行なっているところで例外が発生すると開いた TCPServer のソケットが leak していたのを修正しています。 makeport で sendport は呼ばず呼び元で begin ... ensure で保護されてる場所で呼ぶようにしています。

2015-06-26 ruby-trunk-changes r51032 - r51040

[][]ruby-trunk-changes r51032 - r51040

今日は複数 Thread で同時に Encoding をロードしようとした時にエラーになることがある不具合の修正などがありました。

kazu: r51032 2015-06-26 00:17:05 +0900

r51027 の ChangeLog エントリの typo 修正。

svn: r51033 2015-06-26 00:19:13 +0900

version.h の日付更新。

normal: r51034 2015-06-26 04:01:25 +0900

Hash の実装は順序を保存するため linked list としても構築されているのですが、その list を ccan からもってきている list の実装を利用するようにして巨大な Hash への要素の追加を高速化しています。 [ruby-core:69726] [misc #10278]

normal: r51035 2015-06-26 04:56:20 +0900

r51034 の ccan の list を使った st_table の実装を revert しています。 CIビルド時に SEGV が発生したそうです。

normal: r51036 2015-06-26 08:06:48 +0900

Enumerable#minmax で戻り値をあらかじめ配列を作っておいて rb_ary_store() でセットして返していたのを rb_assoc_new() で作って return するようにしています。主にコードサイズの削減が目的のようです。また hash.c で変数に volatile をつけていたのをやめて RB_GC_GUARD() で保護するようにしています。

nobu: r51037 2015-06-26 12:48:41 +0900

複数の Thread から同時に同じエンコーディングをロードしようとすると競合してエラーになることがある不具合を修正。 rb_require_safe() が Qfalse を返してもエラー扱いにしないようにしています。他の Thread が読んでロード済みになったら Qfalse が返ってくるからですね。 [ruby-dev:49106] [Bug #11277]

ところで rb_require_safe() に渡しているのは $SAFE の safe level みたいですね、 2, 3 も廃止されたのでここで 3 より大きいかチェックしているところも 1 より大きいかにしたほうが良さそうですね。

normal: r51038 2015-06-26 15:22:22 +0900

r51036 の ChangeLog に volatile -> RB_GC_GUARD() への変更についての記述がなかったのを追記しています。

nobu: r51039 2015-06-26 17:57:45 +0900

object.c の convert_type() で method の先頭の "to_" との一致を先に調べるようにして、conv_method_names の静的テーブル内に持つ名前のサイズを削減しています。

nobu: r51040 2015-06-26 17:58:00 +0900

sprintf.c の rb_str_format() で "%p" のために rb_inspect() を呼び出した時に余分な rb_obj_as_string() の呼び出しを行なわないように分岐をまとめています。

2015-06-25 ruby-trunk-changes r51016 - r51031

[][]ruby-trunk-changes r51016 - r51031

今日は GC のマーク漏れの修正や Solaris ではデッドロック回避のため vfork(2) の利用をやめるという変更などがありました。

normal: r51016 2015-06-25 02:44:01 +0900

拡張ライブラリ opensslOpenSSL::SSL::SSLSockt#sysread で nonblock モードではない時にはキーワード引数を受け付けず ArgumentError にするようにしています。

svn: r51017 2015-06-25 02:44:20 +0900

version.h の日付更新。

ko1: r51018 2015-06-25 03:38:36 +0900

r51010 で mark_ptr() に追加した GC のチェックに参照元オブジェクトの情報も出力させるようにしています。 また r51012 で追加したチェックは削除しています。 また RGENGC_OBJ_INFO というマクロを導入して、デフォルトでは RGENGC_DEBUG か RGENGC_CHECK_MODE が非0に設定されたら on になるようにしておいて、とりあえず常に 1 に定義するようにしています。 [ruby-dev:49049] [Bug #11244]

ko1: r51019 2015-06-25 06:44:58 +0900

rb_method_definition_reset() で method entry をリセットする時に def->type が VM_METHOD_TYPE_ATTRSET の時も def->body.attr.location で初期化するようにしています。コミットメッセージによるとどっちかというと初期化がどうというより Write Barrier の挿入が主眼っぽいですね。

ko1: r51020 2015-06-25 06:53:07 +0900

デバッグ関数 obj_info() で T_IMEMO 型のオブジェクト で method entry 用の時の表示に alias の情報も追加しています。

ko1: r51021 2015-06-25 07:10:13 +0900

r51020 に続いて obj_info() の T_IMEMO の method entry 用の時の出力にメソッド定義のタイプ(rb_method_type_t)を文字列化して含めるようにしています。

nobu: r51022 2015-06-25 14:14:18 +0900

test/test_prime.rb でインデントに tab を使っていたところを空白に展開しています。 https://github.com/ruby/ruby/pull/944

nobu: r51023 2015-06-25 14:26:31 +0900

test/test_prime.rb, test/test_securerandom.rb, test_test_tracer.rb などで適切な assertion メソッドを使うようにするリファクタリング

nobu: r51024 2015-06-25 15:32:23 +0900

fill_random_bytes() の Windows 版の実装で ATOMIC_PTR_CAS() を使った排他処理で競合があったかどうかの分岐を先にするようにリファクタリングしています。

nobu: r51025 2015-06-25 16:11:45 +0900

メソッドがみつからない時に NoMethodError を発生させる時に NameError 内の "message" という定数(通常定数は大文字で始まるので、これはインタプリタ内部でしか参照できない)からクラスを取得してメソッド呼び出ししていたのを、直接 rb_name_err_mesg_new() を呼ぶように変更しています。

ko1: r51026 2015-06-25 16:59:23 +0900

rb_method_entry_t と rb_method_definition_t の作成順序をいれかえています。 me->def の方向に参照されているのでこれまで def を作ってから me を作るという順序になっていましたが、mark 処理が rb_method_entry_t の mark 関数で def 経由のオブジェクトもマークしていて、def を作った後 me ができる前にオブジェクトが mark されないタイミングがあったようです。 rb_method_entry_make() の中で rb_method_entry_create() も呼び出してメモリ確保するようにしています。 また mark_method_entry() で def が NULL のケースに対応するようにしています。 [ruby-dev:49049] [Bug #11244]

ko1: r51027 2015-06-25 17:37:27 +0900

r51026 の続き、かな? method_definition_reset() の引数から rb_method_definition_t * を削除して、me->def にセットするのを省くリファクタリング? なんかちょっとよくわからないです。

ngoto: r51028 2015-06-25 18:35:46 +0900

テスト用のユーティリティ test/lib/envutil.rb の assert_no_memory_leak で Solaris 用に子プロセスに渡す環境変数オプションを指定する定数 NO_MEMORY_LEAK_ENVS を作っていたのを test/lib/memory_status.rb に移動しています。 ここでチェックのために EnvUtil.invoke_ruby が呼ばれているので、余分な実行を抑えるためみたいですね。

ngoto: r51029 2015-06-25 19:42:37 +0900

r50977 の Solaris での execv(3) 廃止と同様に Solaris でのデッドロック対策として Solaris では vfork(2) を使わず fork(2) を利用するようにしています。 Solaris での vfork(2) は MT Unsafe なのだそうです。 [ruby-dev:49089] [Bug #11265]

ngoto: r51030 2015-06-25 21:42:07 +0900

r51029 で修正した Solaris でのデッドロックの修正の確認のためのテストを追加しています。 dlsym(3) を呼び出すため拡張ライブラリを用いたテストになっています。 [ruby-dev:49089] [Bug #11265]

svn: r51031 2015-06-25 21:43:13 +0900

r51030 で新規追加されたファイルの svn property 設定。