ymsdです。またまた、質問させてください。 前に、 >自作の拡張ライブラリがGCで落ちるのでデバッガでおいかけてみると、 >gc.cのなかのmark_locations_array(x, n)のnが65000とかになってる >んですけど、これってすでに異常ですか? という質問をしたら、オブジェクトが壊れているせいではないか、という 返事をいただきました。(ありがとうございました) この原因がわかりました。(自分の調査不足でした。すみません) 私は、BeOSでrubyを使っていて、BeOSのGUIを扱う拡張ライブラリができない かなあと、あれこれ試している者なのですが、BeOSはマルチスレッドが売り? のOSなので、Windowを表示すると、rubyを走らせているスレッド(スレッドAと よぶ)とは別のスレッド(スレッドBとよぶ)でWindowが走ります。GCはいつ 発生するかわからないので、スレッドBでGCが処理されることもあります。こ のとき、BeOSではスレッドごとにスタックを積むので、rb_gc_stack_startはス レッドAのスタックにあり、STACK_ENDはスレッドBのスタックにあります。 スレッドAのスタックとスレッドBのスタックは連続してとられるわけではない ので、このままだと、mark_locations_arrayに渡る範囲には、スタックではない 領域も含まれてしまいます。その非スタック領域を触っているうちに落ちてし まっていたのでした。 それで、gc.cにすこし手をいれて、それぞれのスレッドのスタック領域だけを 調査するようにしたら、GCでは落ちなくなりました。 しかし、まだまだ別の原因があるのだと思いますが、落ちまくるのです。 そこで、質問です。 上のような、マルチスレッドな状況になった場合、rubyの動作に影響を及ぼ すと思われるところが他にもあるでしょうか。 XwindowとかWindows9x/NTでは似たような問題は発生しないのでしょうか それとも私はまだ勘違いしているのでしょうか いつも質問ばかりですみませんが、よろしくおねがいいたします。 -- Masuda Yuichi ymsd / m-net.ne.jp