From: Yukihiro Matsumoto Date: 2008-09-02T00:51:36+09:00 Subject: [ruby-dev:36087] Re: x86_64環境でMarshal.dumpの不具合 まつもと ゆきひろです In message "Re: [ruby-dev:36086] Re: x86_64環境でMarshal.dumpの不具合" on Tue, 2 Sep 2008 00:41:51 +0900, "Shugo Maeda" writes: |どうやらmarshal.cのw_object()の以下のif文の条件が真になっているようなのですが、 | | if (st_lookup(arg->data, obj, &num)) { | w_byte(TYPE_LINK, arg); | w_long((long)num, arg); | return; | } | |dump中にGCが発生すると、一時的に生成したBignumオブジェクトのアドレスが |たまたま同じになってしまうため、arg->dataの検索時に誤って以前のオブジェクト |にヒットしてリンクとして処理されてしまうようです。 |他にもdump中に一時的にオブジェクトを生成している部分がもしあれば、同じよう |な問題が発生しそうですね。 なるほど。 |対応としてはarg->dataをHashにするとかでしょうか。 では、その線で行きましょうか。飛行機の中でパッチ作る暇がある かな(なさそう)。