ruby-trunk-changes 2021-08-08

今日は readline のシグナルハンドラのテストの再々修正や別スレッドで IO#close された時の IO 操作で Errno::EBADF 発生の可能性を低減するための変更などがありました。

[f092a9606e] aycabta 2021-08-07 12:16:49 UTC

7af21a78fab75c953646c0c26779e634aa771345 で test/reline/test_terminfo.rb の setup で Reline::Terminfo.setupterm が Reline::Terminfo::TerminfoError 例外を発生させた場合に skip するようにしていましたが、test/reline/helper.rb で環境変数 TERM に "xterm-256color" を強制的にセットすることで回避して rescue 節を消しています。

[1fe73128cd] aycabta 2021-08-07 13:58:26 UTC

f092a9606e0838ec3ffbf946ce4612524c51e870 の続きで環境変数 TERM にセットするのを xterm に変更しています。 Solaris で xterm-256color だと動かなかった模様。

[40ccb87a49] aycabta 2021-08-08 00:25:12 UTC

readline の SIGINT のシグナルハンドラのテストでタイムアウトが発生した場合にその発生箇所のバックトレースも assertion メッセージに含めるようにしています。

[c6398d3d7c] git 2021-08-08 00:25:01 UTC

version.h の日付更新

[f81964568f] Nobuyoshi Nakada 2021-08-08 06:12:38 UTC

GC_ENABLE_INCREMENTAL_MARK=0 でビルドされた場合の未使用関数の警告除去のため gc_marks_step() の定義自体を #if GC_ENABLE_INCREMENTAL_MARK の分岐内に入れるようにしています。

[ca2dd6d35a] aycabta 2021-08-08 06:42:48 UTC

40ccb87a498ec45acc2d2f3e05460b128e9a411c の続き。readline の SIGINT シグナルハンドラのテストでタイムアウトが発生した場合にバックトレースだけでなく Exception#full_message でメッセージ込みのバックトレース文字列を生成して埋め込むように変更しています。

[587f501c7c] Nobuyoshi Nakada 2021-08-08 06:24:55 UTC

gc.c で定義している構造体 gc_profile_record の flags メンバーや rb_objspace_t の profile::latest_gc_info の型を int から unsigned int に変更し、同様に garbage_collect()/gc_start()/gc_prof_setup_new_record() などの reason 引数の型も int から unsigned int に変更しています。ビットフラグとして扱うメンバー/引数なので unsigned にしておくほうが都合がよいので。

[3a8cadcf8f] Samuel Williams 2021-08-08 06:56:16 UTC

io.c の io_bufread() および rb_io_maybe_wait() で rb_read_internal() や rb_io_wait() の前に rb_io_check_closed() で IO が close 済みでないかのチェックを追加して EBADF エラー発生の可能性を減らすようにしています。マルチスレッドで IO#close が呼ばれた場合に発生する可能性はこの変更後も残ってそうですが、少しでも減らすためみたいです。