ruby-trunk-changes r59460 - r59468

今日は Thread と Fiber を利用した時に VM stack の memory leak をする不具合の修正などがありました。

kazu: r59460 2017-08-02 09:20:41 +0900

.travis.yml から rubyspec が trunk に同梱されたため不要になった make update-rubyspec の実行を削っています。

svn: r59461 2017-08-02 09:20:42 +0900

version.h の日付更新。

ko1: r59462 2017-08-02 09:50:42 +0900

Thread の終了時や解放時に rb_thread_t::root_fiber がない時だけ VM stack の解放(リサイクル)処理をするようになっていたのですが、r55766 あたりで Fiber の VM stack 管理を変更した時に変更が完全でなくて、Fiber を使った Thread で stack の解放がされず leak していたようです。 [ruby-core:82183] [Bug #13772]

nobu: r59463 2017-08-02 09:54:13 +0900

r59155 で struct ruby_tag_type という TAG_JUMP() 用の state 専用の型を導入した時に eval.c の setup_exception() の state も型を変更していたのですが、ここの state は EXEC_TAG() の戻り値を受け取るためのものではなかったので int に戻しています。

hsbt: r59464 2017-08-02 11:19:04 +0900

.travis.yml にメール通知の設定をひとつ戻しています。

knu: r59465 2017-08-02 11:20:48 +0900

標準添付ライブラリ ipaddr に .gemspec ファイルを追加して default gem 化しています。

nobu: r59466 2017-08-02 11:40:29 +0900

eval.c の setup_exception() から cause の設定や例外オブジェクトの生成部分を exc_setup_message() という関数(実際には message を作ってるわけじゃなくて例外オブジェクトの準備をしてるのですが)に切り出して rb_longjmp() から setup_exception() の前に呼んでおくようにしています。 setup_exception() の EXEC_TAG() での警告を回避するたみめたいです。

nobu: r59467 2017-08-02 12:02:22 +0900

r59466 の続きみたいですが、RUBY_USE_SETJMPEX が真の時に vm_trace.c の rb_suppress_tracing() で警告除去のため TH_JUMP_TAG() の前に RB_GC_GUARD() を追加しています。また sprintf.c の MAYBE_UNUSED() マクロの定義も 0 で初期化するように変更しています。

yugui: r59468 2017-08-02 14:27:25 +0900

lldb 用のコマンドスクリプト misc/lldb_cruby.py に ObjectSpace を使ったオブジェクト数のカウントのコマンド、スタックトレースの表示、NODE* の構文木のダンプ出力などの機能を追加しています。