任何方式来禁用大中央调度和回退到旧的做事方式

根据问题为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 

此消息似乎来自Grand Central Dispatch。

 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后端正在closures所有3以上的文件描述符,并且可能也正在closures这个特殊的文件描述符。

问题是,有没有什么办法可以让MacOS X不要使用Grand Central Dispatch,而是使用MacOS X 10.5中曾经使用过的东西来避免这个问题,直到MythTV的人们可以打扰他们去查看并修改代码。

另外,任何人都可以解释是否Grand Central Dispatch正在使用一些特殊的文件描述符。

该错误是在MythTV。 命令行参数parsing显然是导致GCD作为一个副作用开始。 解决scheme很简单。 将closures所有描述符的“for()”循环移到main()的最顶端。