From: Aaron Patterson Date: 2010-10-30T05:48:15+09:00 Subject: [ruby-dev:42495] Re: memory profiler for test-all 2010/10/29 Nobuyoshi Nakada : > なかだです。 > > At Fri, 29 Oct 2010 03:05:07 +0900, > SASADA Koichi wrote in [ruby-dev:42481]: >> > fiddle の箇所で SEGV します。ただ、fiddle だけで実行すると SEGV しな >> > い。きちんと調べないと無理っぽいです。ObjectSpace.each_objects 相当をし >> > ているので、誰かが変なオブジェクトを生成している、ってことだと思います。 >> >> これは、この仕組みがうまく機能していなかっただけで、改訂版ではきっちり >> test-all TESTS=fiddle で SEGV しました。 > > Fiddle::Closure#allocateがcifを初期化していないからのようです。 > どこかでinitializeされないままのインスタンスがあるんでしょう。 > これでSEGVします。 > > 10000.times{ObjectSpace.memsize_of(Fiddle::Closure.allocate)} > > allocate()に MEMZERO(closure->cif, ffi_cif, 1) を入れるだけでも > 落ちなくなりますが、そもそもcifをポインタにする必要もないように > 見えます。 十分に納得出来る理由ですね。パッチにも問題ないと思います。早速私よりも先に問題を発見してくれて本当に感謝します。 のぶさんが今回のパッチをコミットしてくれたら、次回私が訪日する際にビールをおごることをお約束いたします。 -- Aaron Patterson http://tenderlovemaking.com/