From: Tomoyuki Chikanaga Date: 2010-06-22T18:35:21+09:00 Subject: [ruby-dev:41671] [Bug #3463] 1.9.2-preview3 で [BUG] gc_sweep(): unknown data type 0x0 Bug #3463: 1.9.2-preview3 で [BUG] gc_sweep(): unknown data type 0x0 http://redmine.ruby-lang.org/issues/show/3463 起票者: Tomoyuki Chikanaga ステータス: Open, 優先度: Normal ruby -v: ruby 1.9.2dev (2010-05-31 revision 28117) [i686-linux] 1.9.2-preview3 である大きなプログラムを実行中に以下のようなエラーが発生しました。 [BUG] gc_sweep(): unknown data type 0x0(0xab7cf14) ruby 1.9.2dev (2010-05-31 revision 28117) [i686-linux] 発生条件はかなり複合的らしく再現する小さなスクリプトを作成できていませんが、 gdb で実行してみると gc_sweep で上記のチェックにひっかかっているオブジェクトは flags が FL_TAINT だけという状態だったため、 OBJ_TAINT している場所をさらってみたところ marshal.c の clear_dump_arg が怪しいようでした。 dump_arg(T_DATA 型のオブジェクト)は GC で deffered されるため dump_arg::str が先に sweep されてしまう場合があり、 clear_dump_arg() で解放後の VALUE に対して OBJ_TAINT (や、おそらく OBJ_UNTRUST も)してしまうと発生するようでした。 とりあえず添付のパッチを当ててみると落ちなくなりました。また make test, test-all でエラーが増えていません。 ---------------------------------------- http://redmine.ruby-lang.org