有没有办法禁用 Grand Central Dispatch 并恢复到以前的处理方式

有没有办法禁用 Grand Central Dispatch 并恢复到以前的处理方式

根据 MythTV 后端的问题:

http://svn.mythtv.org/trac/ticket/7582

在 MacOS X 10.6.2 上运行 MythTV 后端时,它会崩溃:

BUG IN CLIENT OF LIBDISPATCH: Do not close random Unix descriptors

该消息似乎来自中央调度中心。

Exception Type:  EXC_BAD_INSTRUCTION (SIGILL)
Exception Codes: 0x0000000000000001, 0x0000000000000000
Crashed Thread:  1  Dispatch queue: com.apple.libdispatch-manager

Application Specific Information:
BUG IN CLIENT OF LIBDISPATCH: Do not close random Unix descriptors

Thread 1 Crashed:  Dispatch queue: com.apple.libdispatch-manager
0   libSystem.B.dylib                   0x9481ea51 _dispatch_mgr_invoke + 804
1   libSystem.B.dylib                   0x9481dcc3 _dispatch_queue_invoke + 163
2   libSystem.B.dylib                   0x9481da68 _dispatch_worker_thread2 + 234
3   libSystem.B.dylib                   0x9481d4f1 _pthread_wqthread + 390
4   libSystem.B.dylib                   0x9481d336 start_wqthread + 30

由于 MythTV 中有关此问题的代码位于 main() 的早期,因此只能想象 Grand Central Dispatch 库的链接会自动导致某个后台线程运行,该线程会监视某些特殊文件描述符。问题是 MythTV 后端正在关闭从 3 开始的所有文件描述符,并且可能也会关闭这个特殊文件描述符。

问题是,是否有任何方法可以设置 MacOS X,使其不使用 Grand Central Dispatch,而使用在 MacOS X 10.5 下使用的任何程序,以尝试避免此问题,直到 MythTV 人员有心查看它并更改代码。

另外,有人能解释一下 Grand Central Dispatch 是否按照我推理使用了一些特殊的文件描述符吗?

答案1

该错误出现在 MythTV 中。命令行参数解析显然导致 GCD 作为副作用启动。解决方案很简单。将关闭所有描述符的“for ()”循环移至 main() 的最顶部。

相关内容