ruby-trunk-changes r45487 - r45498

今日は Symbol GC で LazySweep により回収中の Symbol オブジェクトを再利用してしまう不具合の修正と、標準添付ライブラリ csv の header の扱いについての不具合修正がありました。

nobu: r45487 2014-03-31 23:38:38 +0900

Symbol GC の導入に関連して alias やメソッド定義時に明示的に SYM2ID() を呼んで Symbol を pin down するようにしています。 なるほどー内部的に ID で管理しているもので dynamic Symbol を渡した場合は逆に pin down しないといけないケースもあるんですね。

nobu: r45488 2014-03-31 23:57:47 +0900

拡張ライブラリ readline の extconf.rb で r45240 で古い Readline で rl_hook_func_t という型がない時に -D オプションで定義を追加する時に $DEFS という誤ったグローバル変数を使ってたので $defs に修正しています。 [ruby-core:61756] [Bug #9578]

naruse: r45489 2014-04-01 07:34:41 +0900

vm_dump.c で rb_dump_backtrace_with_lines() を利用する条件に HAVE_DLADDR を追加して dladdr(3) が定義されている環境だけで呼び出すようにしています。

svn: r45490 2014-04-01 07:34:46 +0900

version.h の日付更新。

naruse: r45491 2014-04-01 07:39:07 +0900

ELF の .dynstr と .dynsym セクションのアドレスも読み取って .symtab がなかった時はかわりに .dynstr/.dynsym を利用するようにしています。

ktsj: r45492 2014-04-01 09:07:58 +0900

Symbol GC により rb_str_dynamic_intern() で ID から Symbol を得た時にそれが LazySweep により mark フェーズで mark されず sweep 予定のものが取れる場合があって、その時に rb_gc_resurrect() でその Symbol オブジェクトを再利用するようにしています。

naruse: r45493 2014-04-01 12:38:05 +0900

r45412 のあたりで C level backtrace 取得時に現在実行中のプログラムの実行形式ファイル取得の処理を main_exe_path() という関数に切り出して Linux の /proc/self/exe を利用する処理だけ残しています。またベースアドレス取得のため _start というシンボルを利用していたのはやめて .dynstr/.dynsym セクションから適当なシンボルを利用するようにしています。 ここ dlopen(3) に対応する dlclose(3) がないのはいいのかな。

nobu: r45494 2014-04-01 17:29:36 +0900

r41293 でビルド時に config.guess, config.sub というツールをリポジトリから消して git.savannah.gnu.org からダウンロードするようにしたのですが、サーバが落ちてた時などダウンロードが失敗した時にどこからダウンロードしようとして失敗したのかをエラーメッセージとして出力するようにしています。 また参照先の URL も http://git0.savannah.gnu.org/gitweb/... に変更しています。 [ruby-core:61792] [Bug #9690]
そういえば結局これリポジトリから消したのはなんでだったんでしょう。

hsbt: r45495 2014-04-01 17:58:59 +0900

README.EXT と README.EXT.ja の typo 修正。 [ruby-core:61634] [Bug #9662]

naruse: r45496 2014-04-01 19:55:10 +0900

r45494 で config.guess などをダウンロードする URL を変更してたのを戻しています。多分わざと失敗させるために変更してたのをそのままコミットしてしまってたんですね。

jeg2: r45497 2014-04-01 23:35:03 +0900

標準添付ライブラリ csv で header を取得する時に :header_converters オプションで header の内容を変更する時に空の要素は処理をスキップして NoMethodError などが発生しないようにしています。

jeg2: r45498 2014-04-01 23:40:48 +0900

標準添付ライブラリ csv で :header_converters オプションの :symbol でヘッダ要素を Symbol に変換する時に前後の空白を除去してから Symbol 化するようにしています。 https://github.com/ruby/ruby/pull/575