ruby-trunk-changes r64071 - r64091

今日は Unicode の normalization の不具合修正、Windows 環境での ARGV の taint フラグセット、MJIT でのメモリリーク修正などがありました。

nobu: r64071 2018-07-27 14:42:56 +0900

external_str_new_cstr() という関数で Encoding の扱いの関係で Windows 環境下で別処理になってて taint していなかったのを修正しています。 ARGV や $0 の初期化に使っているようです。 [ruby-dev:50596] [Bug #14941]

k0kubun: r64072 2018-07-27 14:52:01 +0900

MJIT のテスト用のユーティリティメソッド eval_with_jit で --jit-max-cache をつけた起動もサポートしてこのオプションの動作テストを行うようにしています。

k0kubun: r64073 2018-07-27 15:01:46 +0900

mjit.c の free_unit() で rb_iseq_body_t::jit_func をクリアするのに 0 のかわりに NOT_ADDED_JIT_ISEQ_FUNC という定数マクロを使うようにリファクタリング

mame: r64074 2018-07-27 15:28:14 +0900

insns.def の VM 命令 getconstant と setconstant のコメントから toplevel からの探索についての記述を削除しています。

k0kubun: r64075 2018-07-27 17:24:10 +0900

r64073 の再修正。 NOT_ADDED_JIT_ISEQ_FUNC でなく NOT_READY_JIT_ISEQ_FUNC でクリアするようにしています。また free_unit() にコメントをつけてこの関数の挙動について追記しています。そして unload_units() からも free_unit() を呼ぶようにしています。 unload_units() では xfree() が呼ばれてなくてメモリリークしていたみたいです。

k0kubun: r64076 2018-07-27 17:51:56 +0900

r64073 と r64075 のさらに続きで free_unit() で ISeq がまだ GC されてない時の rb_iseq_body_t::jit_func のクリアを NOT_READY_JIT_ISEQ_FUNC から NOT_COMPILED_JIT_ISEQ_FUNC に変更しています。 enum rb_mjit_iseq_func にはもともと NOT_COMPILABLE_JIT_ISEQ_FUNC という定数があったのですが、これを NOT_COMPILED_JIT_ISEQ_FUNC に改名してこれを使うようにしています。

k0kubun: r64077 2018-07-27 18:27:58 +0900

MJIT で mswin 以外の環境で一旦 .o ファイルを作ってから .so にリンクするコンパイルをするようにしてましたが、その時すぐに *.o ファイルを削除せずに、unload 時の遅延削除処理の clean_so_file() を clean_object_files() に改名して mswin 以外の環境で *.o ファイルも削除対象にするようにしています。

mame: r64078 2018-07-27 22:57:14 +0900

Class/Module が freeze されてないかチェックする関数 rb_frozen_class_p() が名前に反して真偽を返さずに freeze されていたら例外を発生させていたので、目的を鑑みて関数名を rb_class_modify_check() に変更しています。

tenderlove: r64079 2018-07-28 02:19:43 +0900

標準添付ライブラリ uriURI() などで parse 時に引数の uri をそのまま例外メッセージに埋め込んでいたのを inspect メソッドを呼んでから埋め込むようにしています。

svn: r64080 2018-07-28 02:19:44 +0900

version.h の日付更新。

tenderlove: r64081 2018-07-28 02:28:41 +0900

Hash#size と Hash#length は同じCの実装で別のメソッドとして定義されてるので、rdoc 用コメントもまとめて書かれてるのですが、サンプルコードに length を使ったものしかないので、size を使った例を追加しています。

k0kubun: r64082 2018-07-28 07:27:04 +0900

r64073 や r64076 で弄ってた mjit.c の free_unit() で rb_iseq_body_t::jit_func と同時に rb_iseq_body_t::jit_unit も、こちらは NULL でクリアするようにしています。

normal: r64083 2018-07-28 12:10:10 +0900

blocking_region_end() で GVL を獲得する前に ubf (unblocking function)の管理リストへの登録を削除するようにしています。コミットログによると GVL 獲得後にリストから外すとその前に再度 ubf が別 thread により再度リスト登録されて意図しないシグナル送出などが行われる可能性があるためとのこと。 ubf_list に自分の thread 以外が登録することってあるのかな。 [ruby-core:88141] [Bug #14945]

normal: r64084 2018-07-28 12:34:30 +0900

ドキュメントやツール類で GitHubリポジトリの URL に git:// ではなく https:// を使うように変更しています。

duerst: r64085 2018-07-28 17:56:59 +0900

test/test_unicode_normalize.rb で Unicode 用のデータファイルのパスを格納する定数 UNICODE_DATA_PATH に r61417 と同様に ucd というサブディレクトリを使うようにしています。

duerst: r64086 2018-07-28 18:11:13 +0900

test/test_unicode_normalize.rb で Unicode 用のデータファイルの NormalizationTest.txt が存在する時だけ実行されるテストクラス TestUnicodeNormalize から、データファイルに依存しない部分を open class で別の class 文で定義するように切り分けています。

duerst: r64087 2018-07-28 18:44:33 +0900

lib/unicode_normalize/normalize.rb のハングルの文字の normalization に不具合があったみたいで修正しています。 [ruby-core:88070] [Bug #14934]

kazu: r64088 2018-07-28 19:00:27 +0900

ドキュメントやコメント、ツールで URL のスキーマに http を使っていたところを https に変更しています。

kazu: r64089 2018-07-28 19:00:29 +0900

lib/irb/completion.rb のヘッダコメントのファイル名が間違ってたので修正。

nobu: r64090 2018-07-28 21:47:36 +0900

tool/make-snapshot でチェックアウトするリポジトリGitHub から https://git.ruby-lang.org/ のほうへ変更しています。

nobu: r64091 2018-07-28 22:06:43 +0900

拡張ライブラリ fiddle のテストで Fiddle::Function で poll(2) を呼ぶテストでエラーが発生した時に errno に対応するメッセージをエラーメッセージに含めるようにしています。