В чем причина EXC_BAD_INSTRUCTION при pthread exit/join в Mac OS 10.12?
Наша программа (модуль C++ для node.js под электроном) иногда падает с Illegal instruction 4
(stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
) в Mac OS 10.12.
Эта ошибка не возникает каждый раз, но когда происходит, трассировка стека либо
frame #0: 0x00007fffaf4e5b7e libsystem_platform.dylib`_os_unfair_lock_corruption_abort + 23
frame #1: 0x00007fffaf4e53ee libsystem_platform.dylib`_os_unfair_lock_lock_slow + 158
frame #2: 0x00007fffaf4f000d libsystem_pthread.dylib`_pthread_terminate + 285
frame #3: 0x00007fffaf4ee17f libsystem_pthread.dylib`_pthread_exit + 318
frame #4: 0x00007fffaf4ec946 libsystem_pthread.dylib`_pthread_body + 191
frame #5: 0x00007fffaf4ec887 libsystem_pthread.dylib`_pthread_start + 286
frame #6: 0x00007fffaf4ec08d libsystem_pthread.dylib`thread_start + 13
или как
thread #1, name = 'CrBrowserMain', queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
frame #0: 0x00007fffaf4e5b7e libsystem_platform.dylib`_os_unfair_lock_corruption_abort + 23
frame #1: 0x00007fffaf4e53ee libsystem_platform.dylib`_os_unfair_lock_lock_slow + 158
frame #2: 0x00007fffaf4ee5f7 libsystem_pthread.dylib`pthread_join + 187
frame #3: 0x0000000111098955 module.node`MyThread::join(this=0x0000000106a56038, timeoutMs=4294967295) at MyThread.cpp:101
... // private code
Вот беда:
disassemble --pc
libsystem_platform.dylib`_os_unfair_lock_corruption_abort:
-> 0x7fffaf4e5b7e <+23>: ud2
libsystem_platform.dylib`_os_unfair_lock_unowned_abort:
0x7fffaf4e5b80 <+0>: mov eax, edi
0x7fffaf4e5b82 <+2>: lea rcx, [rip + 0x2082] ; "BUG IN CLIENT OF LIBPLATFORM: Unlock of an os_unfair_lock not owned by current thread"
0x7fffaf4e5b89 <+9>: mov qword ptr [rip + 0x8d6e730], rcx ; gCRAnnotations + 8
Я уже пытался скомпилировать с clang
с вариантами -mmacosx-version-min=10.10
и с -fsanitize=address
, Дезинфицирующее средство не показывает никаких нарушений доступа к памяти перед SIGILL и macosx-version-min
не помогает
Все предупреждения компилятора с -Wall -Wno-long-long -pedantic
были пересмотрены, ничего даже слегка опасного.
Clang версия:
$ clang -v
Apple LLVM version 8.0.0 (clang-800.0.42.1)
Target: x86_64-apple-darwin16.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
Я застрял. Как я не могу найти причину этого SIGILL?