From: "H.Yamamoto" Date: 2005-12-19T16:18:57+09:00 Subject: [ruby-dev:28050] Re: ruby 1.8 dumps core 山本です。 >> 完治は無理でも、直せるところは直しておこうと HEAD でいじってみた結果、 >> 私の環境では RUBY_ALWAYS_GC で SEGV することはなくなりました。 > >こちらで試すと落ちますね。 > >% RUBY_ALWAYS_GC= ./ruby test/runner.rb test/yaml/test_yaml.rb >Loaded suite test_yaml.rb >Started >......................../home/akr/ruby/tmp-ruby/lib/ruby/1.9/yaml.rb:217: [BUG] rb_gc_mark(): unknown data type 0x0(0x81ce388) non object >ruby 1.9.0 (2005-12-19) [i686-linux] うーん、そうですか・・・バックポートは取り下げます。 >> しかしながら、 >> >> 1) Error: >> test_circular_references(YAML_Unit_Tests): >> TypeError: can't convert Hash into String >> E:/ruby-cvs/ruby/lib/yaml.rb:133:in `load' >> E:/ruby-cvs/ruby/test/yaml/test_yaml.rb:1226:in `test_circular_references' >> >> というエラーが毎回報告され、どうにも解消できません。(RUBY_ALWAYS_GC をつけずに >> 普通に testrb yaml すると報告されません) > >自分で調べているわけではないので話半分に聞いてほしいのですが、 >メッセージから見ると、string が hash にすり変わっているよう >に思えます。そのようなことが起こる可能性としては string が >GC された直後に hash が allocate されるという状況が思い浮か >びます。 > >まぁ、なにはともあれどこで起きた GC が問題を引き起こしている >のか同定するのがいいんじゃないですかね。 >(そこに rb_gc を入れればテストの実行が高速になってデバッグ効 >率も良くなるし) 田中さんの提唱する GC.always メソッド版があれば便利な気がします。 現状では、test_yaml が実行される前にすごく長い時間がかかります。