アプリを 10.6 から 10.8 に移植しています。アプリにロードするdylibを見ています。ガベージ コレクション ワーク キューで非常に異常なクラッシュが発生し、次のメッセージが表示されます。
malloc: Thread::suspend(): unable to suspend a thread: err = 268435459, Thread 0x111000000: _pthread = 0x108129000, _thread = 0x8b07, _stack_base = 0x108129000, enlivening on, 0 local blocks
アプリケーション用GCC_ENABLE_OBJC_GC = required
が設定されています。dylibを使用している場合GCC_ENABLE_OBJC_GC = required
でもクラッシュします。アプリケーションでガベージ コレクタをオフにできません。dylib からのクラッシュを管理する必要があります。
クラッシュの原因は、ガベージ コレクターがスレッドを中断できないことが原因であることが判明しました。(ログにあるように)。このスレッドは、thread_create()を使用して作成されます。dylib のコンストラクターに (スリープを使用して) 無期限の while ループを配置すると、クラッシュしません。コンストラクターが実行を終了すると、クラッシュします。
ガベージコレクターにスレッドを一時停止しようとしないように指示する方法はありますか? または、スレッドの参照カウントを増やすには?または、ガベージコレクターを停止してdylibコードに干渉しないようにするためにできること。