我们正在将应用程序从 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
设置。如果我有GCC_ENABLE_OBJC_GC = required
dylib 它仍然会崩溃。我无法在应用程序中关闭垃圾收集器。我必须从我的 dylib 中管理它崩溃。
崩溃的原因是垃圾收集器无法挂起线程。(正如它在日志中所说)。该线程是使用thread_create()创建的。如果我在 dylib 的构造函数中放置一个无限期的 while 循环(带睡眠),我不会崩溃。当构造函数完成执行时,我会崩溃。
他们是一种告诉垃圾收集器不要尝试挂起线程的方法吗?或者增加线程的引用计数?或者我可以做的任何事情来阻止垃圾收集器不干扰我的 dylib 代码。