是什么导致 MacOS Sierra 中的 libdispatch 错误 EVFILT_MACHPORT?
What causes libdispatch error EVFILT_MACHPORT in MacOSX Sierra?
早上好,
我的应用程序遇到崩溃。当用户尝试启动它时,他等了一分钟,然后引发了 std::exception。真的我无法自己重现这个错误,但这似乎是一个很常见的问题。
我唯一可以跟踪的是系统日志中的以下行:
libdispatch 客户端中的 BUG:kevent[EVFILT_MACHPORT] 在调用源取消处理程序之前监控的资源消失了
然后,我开始 google 它,但找不到更多...我只能 "suppose" GCD (that I do not use afaik, or at least not directly...). What I saw in Internet is that it is related with MacOSX Sierra. But the majority of forum have no answer, just a lot of tries without a unique result. Maybe the only web page that seems a bit clear about a workaround (that I have not tested, and anyway I do not want to use) is this。
有问题
所以...:[=12=]
- 有人清楚什么会导致 libdispatch 中的异常吗?
- 谁能给我一些好的link,官方文档之类的?
- 如果没有更新,Sierra 中是否存在错误?
- 会不会跟某个应用的安装程序有关?
- 有人知道用测试程序重现此异常的方法吗?
这条 libdispatch 日志消息不是致命的,而且几乎可以肯定与你的崩溃无关,这听起来像是由于未捕获的 C++ 异常而中止(没有 crashreport/backtrace 很难说更多) . libdispatch 本身不会生成任何 C++ 异常 FWIW。
至于该特定日志消息的含义,它与 dispatch_source_create(3) 联机帮助页中的以下部分相关:
CANCELLATION:
Important: a cancellation handler is required for file descriptor and mach port based sources in order
to safely close the descriptor or destroy the port. Closing the descriptor or port before the cancellation handler has run may result in a race condition: if a new descriptor is allocated with the same
value as the recently closed descriptor while the source's event handler is still running, the event
handler may read/write data to the wrong descriptor.
如果您看到 EVFILT_MACHPORT "vanished" 日志消息,则表明您的进程中有人违反了 API 合同并在调度源仍在监视它时释放了一个 machport(导致内核生成 EV_VANISHED kevent),请参阅 source code.
早上好,
我的应用程序遇到崩溃。当用户尝试启动它时,他等了一分钟,然后引发了 std::exception。真的我无法自己重现这个错误,但这似乎是一个很常见的问题。
我唯一可以跟踪的是系统日志中的以下行:
libdispatch 客户端中的 BUG:kevent[EVFILT_MACHPORT] 在调用源取消处理程序之前监控的资源消失了
然后,我开始 google 它,但找不到更多...我只能 "suppose" GCD (that I do not use afaik, or at least not directly...). What I saw in Internet is that it is related with MacOSX Sierra. But the majority of forum have no answer, just a lot of tries without a unique result. Maybe the only web page that seems a bit clear about a workaround (that I have not tested, and anyway I do not want to use) is this。
有问题所以...:[=12=]
- 有人清楚什么会导致 libdispatch 中的异常吗?
- 谁能给我一些好的link,官方文档之类的?
- 如果没有更新,Sierra 中是否存在错误?
- 会不会跟某个应用的安装程序有关?
- 有人知道用测试程序重现此异常的方法吗?
这条 libdispatch 日志消息不是致命的,而且几乎可以肯定与你的崩溃无关,这听起来像是由于未捕获的 C++ 异常而中止(没有 crashreport/backtrace 很难说更多) . libdispatch 本身不会生成任何 C++ 异常 FWIW。
至于该特定日志消息的含义,它与 dispatch_source_create(3) 联机帮助页中的以下部分相关:
CANCELLATION: Important: a cancellation handler is required for file descriptor and mach port based sources in order to safely close the descriptor or destroy the port. Closing the descriptor or port before the cancellation handler has run may result in a race condition: if a new descriptor is allocated with the same value as the recently closed descriptor while the source's event handler is still running, the event handler may read/write data to the wrong descriptor.
如果您看到 EVFILT_MACHPORT "vanished" 日志消息,则表明您的进程中有人违反了 API 合同并在调度源仍在监视它时释放了一个 machport(导致内核生成 EV_VANISHED kevent),请参阅 source code.