From: Masaki Suketa Date: 2008-07-01T22:01:23+09:00 Subject: [ruby-dev:35294] Re: [BUG] test_win32ole_event.rb in trunk 助田です。 反応が鈍くてすいません。 U.Nakamura wrote: > 場所はわかりました。 > GC中(具体的にはsweep中)にEVENTSINK_Invoke()が呼ばれて、その中 > でWC2VSTR()でStringを確保しているのが引っかかっています。 ありがとうございます。 > よくわかってないんですが、EVENTSINK_Invoke()などは非同期にWindows > から呼び出されているんでしょうか? EVENTSINK_Invokeは、COMサーバー側で何らかのイベントが 発生したときにCOMサーバー側から呼ばれます。 なので、非同期に呼び出されています。 WIN32OLE_EVENTの中核になります。 > だとすると、これらのコールバック関数内でのrubyオブジェクト操 > 作はちょっと考えないといけないんじゃないかという気がします。 うーん。 上のWC2VSTRだけなら何とかなるでしょうけど、rubyオブジェクト操作 一切禁止で実装する方法は、今のところ思いつかないです。 GC中だったらGCが終わるまで待つための仕組みって提供されて いるんでしょうか? よくわかってないのですが、RUBY_CRITICALとかは使えるんでしょうか? > それとも、単にfree処理の結果としてEVENTSINK_Invoke()がコール > バックされるだけなんでしょうか? こっちの可能性は低い気がします。 助田 雅紀