Я разрабатываю плагин, который работает в нескольких хост-приложениях и поддерживает свои собственные потоки, используя библиотеку boost :: thread, версия 1.53.0.
При запуске моего плагина в определенном приложении на Mac я получаю ошибку нулевого доступа при вызове boost::condition_variable::timed_wait()
, На вершине стека вызовов находится вызов pthread_getspecific()
, который вызывается из библиотеки потоков поддержки.
Если я заменю timed_wait()
с призывом к boost::this_thread_sleep()
то же поведение: исключение выдается, когда pthread_getspecific()
называется внутренне.
Это приложение является единственным, которое демонстрирует такое поведение; если я запускаю плагин на других хостах, он работает как положено.
У меня нет большого опыта работы с pthreads, но я думаю, что исключение должно быть вызвано некоторыми свойствами, устанавливаемыми хост-приложением. У кого-нибудь есть идеи о том, что здесь происходит?
Спасибо!
Оказывается, что в моем приложении API-интерфейс pthread вызывает потокобезопасность, вызывая сбой нулевого указателя, когда я вызываю их в отдельном потоке.
Других решений пока нет …