2007年 11月 12日

Chemr / DRb コネクションスレッドでの GC 時におちる

外部から DRb で Chemr にアクセスしてそのうえそのスレッドで GC が発生すると落ちるんだけどどうしたらいいかサッパリわからんよ><

巨大なインデックスもってる chm をひらいて Amalgam 側から Chemr インデックスひこうとすると Chemr が落ちる。でかいインデックスもってるのを Amalgam からひかないようにすれば一応大丈夫だけど、たくさん開いてるとタイミング悪く GC がきたりするし……

該当メソッドだけ GC 禁止してもメソッドから抜けた DRb 内で GC 発生すると死ぬし、アドホックな解決はできなそう。

EXC_BAD_ACCESS (0x0001)
KERN_INVALID_ADDRESS (0x0001) at 0xc009aae4

Thread 0 Crashed:
0    _NSAddExceptionHandlerForLock + 261
1    _NSAppKitLock + 59
2    -[NSEvent dealloc] + 122
3    0x27000 + 6206
4    obj_free + 986
5    gc_sweep + 453
6    garbage_collect + 503
7    rb_gc + 11
8    rb_gc_start + 11
9    call_cfunc + 283

開放されちゃだめなのか開放されてるのかなぁ。