今日は 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
標準添付ライブラリ uri の URI() などで 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: 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 に対応するメッセージをエラーメッセージに含めるようにしています。