Что вызывает ошибку libdispatch EVFILT_MACHPORT в MacOSX Sierra?

Доброе утро,

Я столкнулся с сбоем в моем приложении. Когда пользователь пытается запустить его, он ждет как минуту, а затем возникает исключение std ::. На самом деле я не мог воспроизвести ошибку самостоятельно, но это кажется довольно распространенной проблемой.

Единственное, что я мог отследить, это следующая строка в системном журнале:

Ошибка в клиенте libdispatch: отслеживаемый ресурс kevent [EVFILT_MACHPORT] исчез до того, как был вызван обработчик отмены источника

Затем я начинаю гуглить и не могу найти гораздо больше … Я могу только «предположить», что это какая-то проблема с НОД (что я не использую afaik, или, по крайней мере, не напрямую …). В интернете я увидел, что это связано с MacOSX Sierra. Но большинство форумов не имеют ответа, просто много попыток без уникального результата. Возможно, единственная веб-страница, которая кажется немного ясной об обходном пути (которую я не проверял, и в любом случае я не хочу использовать), этот.

Так…:

  • у кого-то есть понятно, что может вызвать исключение в libdispatch?
  • кто-то может дать мне хорошую ссылку, официальную документацию или что-то?
  • Правда ли, что в Sierra может быть ошибка без обновлений?
  • Может ли это быть связано с установщиком приложения?
  • Кто-то знает способ воспроизвести это исключение с помощью тестовой программы?

0

Решение

Это сообщение в журнале libdispatch не является фатальным и почти наверняка не связано с вашим сбоем, который звучит как прерывание из-за необработанного исключения C ++ (без аварийного отчета / обратного отслеживания трудно сказать что-либо еще). libdispatch не генерирует никаких исключений C ++ FWIW.

Что касается значения этого конкретного сообщения журнала, оно относится к следующему разделу man-страницы dispatch_source_create (3):

ОТМЕНА:
Важно: обработчик отмены требуется для файлового дескриптора и источников на основе портов MAC в порядке
безопасно закрыть дескриптор или уничтожить порт. Закрытие дескриптора или порта до запуска обработчика отмены может привести к состоянию гонки: если новый дескриптор назначен с тем же
значение как недавно закрытый дескриптор, пока обработчик события источника все еще работает, событие
Обработчик может читать / записывать данные в неправильный дескриптор.

Если вы видите «исчезнувшее» сообщение журнала EVFILT_MACHPORT, кто-то в вашем процессе нарушил этот контракт API и освободил мачпорт, в то время как источник отгрузки все еще отслеживал его (в результате чего ядро ​​сгенерировало kevent EV_VANISHED), см. исходный код.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]