From: Yusuke ENDOH Date: 2009-11-13T09:42:08+09:00 Subject: [ruby-dev:39682] Re: [Bug #2060] DLをCからRubyに変換する事を勧めます 遠藤です。 2009年9月9日12:57 Tanaka Akira : > このテストを取り入れた後、test-all が SEGV するようになっています。 > > http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/log/20090908T095209.log.txt.gz > > test/dl/test_cptr.rb だけでも再現するようです。 ruby_xmalloc で確保した領域を、libc の free で解放することは許される のでしょうか。dynamic loading の仕様が許すかどうかはわかりませんが、 少なくとも ruby としては ruby_xfree で解放することを意図していると 思います。 落ちる原因がそれかどうかはわかりませんが、このテストはそういうことを しています。 CPtr の free に ruby_xfree を与えれば動くかもしれませんが、free には ruby_xfree しか与えられないので、free の存在意義がありません。 CPtr.malloc は作成中の残骸か何かで、使えないのではないかと思います。 結論を言うと CPtr.malloc は使用禁止、もしくは仕様レベルからの修正が 必要だと思います。 したがって、CPtr.malloc のドキュメントをはずすことを提案します。 互換性が許すならば CPtr.malloc 自体を消した方がいいと思います。 ちなみに CPtr.new は問題なく使えそうです。ただし、free を割り当てる 場合は同じ領域に複数の CPtr を作ってはいけないというルールがあると 思います。このルールは rdoc に明記されるべきだと思います。 -- Yusuke ENDOH