ruby-trunk-changes r46349 - r46357

今日は利用する malloc 実装を jemalloc にする configre の --with-jemalloc オプションの追加がありました。

normal: r46349 2014-06-05 04:34:03 +0900

configure に --with-jemalloc というオプションを追加して、指定されたら -ljemalloc をつけてビルドするようにしています。おお、これだけでいいの? お手軽だなぁ…そう考えていた時期がわたしにもありました(数分)。 [ruby-core:62912]

svn: r46350 2014-06-05 04:34:14 +0900

version.h の日付更新。

ko1: r46351 2014-06-05 10:05:07 +0900

obj_free() で世代のフラグを管理しているビットマップをクリアする時の条件をビットマップのビットが立っているかのチェックだけでなく struct RBasic::flags のフラグもチェックするようにしています。ううむ、これはなぜかな…。フラグをみればビットマップのチェックが不要になるから効率的だからでしょうか。でも RGENGC_AGE2_PROMOTION がデフォルトで有効な現在の trunk では結局ビットマップもチェックするから…と思ったけど false の時はビットマップをみなくて良くなるわけですね。

hsbt: r46352 2014-06-05 12:47:46 +0900

misc/README の ruby-debug のプロジェクトの rubyforge.org へのリンクを GitHubリポジトリへのリンクに変更しています。 rubyforge.org はサイト運営を終了したのでリンク切れになったためですね。

hsbt: r46353 2014-06-05 12:53:25 +0900

man/ruby.1 のマニュアルページからも rubyforge.org へのリンクを削除しています。

nobu: r46354 2014-06-05 14:16:46 +0900

r46349 の configure --with-jemalloc の変更ですが、jemalloc/jemalloc.h ヘッダの存在もチェックして include/ruby/missing.h で #include するようにしています。 また io.c、dln.c、parse.y、st.c で malloc/callloc/realoc/free などをマクロ定義しているところで、(これらがマクロとして定義されている可能性を考慮して)その前に #undef しておくようにしています。 [ruby-core:62939] [Feature #9113]

nobu: r46355 2014-06-05 14:36:28 +0900

ruby -v で malloc_conf という利用している malloc 実装を判別するための定数を表示するようにしています。そのため jemalloc を使わなくても jemalloc/jemalloc.h は(あれば) #include しておくようにしています。 [Feature #9113]
malloc_conf って jemalloc を使わなくても意味がある表示になるんですかね?

ko1: r46356 2014-06-05 16:14:53 +0900

gc_page_sweep() で T_ZOMBIE のオブジェクトの時に empty_slots をカウントアップしないようにして、sweep_page->final_slots に final_slots を代入していたのを加算するように修正しています。

akr: r46357 2014-06-05 18:16:57 +0900

io/nonblock のテストで Thread の終了待ちをするように修正しています。