2015-07-04 1 views
0

У меня случился сбой, который происходит только на 32-битных устройствах.OSAtomicIncrement64Barrier crash на 32-битных устройствах

Я использую OSAtomicIncrement64Barrier (в потоке аудио в реальном времени), чтобы увеличить счетчик, чтобы уведомить другой поток о произошедшем обновлении.

Повреждение последовательно происходит на линии OSAtomicIncrement64Barrier - но только если он работает, но не подключен к Xcode.

Я недостаточно хорошо знаю о функциях OSAtomic, чтобы понять корень проблемы, или если я просто делаю что-то неправильно.

Символизированный отчет о сбое (все они выглядят одинаково!) Для нарушающего потока ниже. Не знаете, какая другая информация может понадобиться для ответа на этот вопрос, поэтому дайте мне знать в комментариях, что еще вам нужно знать!

Incident Identifier: 33861B2A-55F9-473A-86FC-BD738CF3A83C 
CrashReporter Key: 32b13822728d1015dfd82c926d70db8659f56248 
Hardware Model:  iPad3,1 
Process:    myApp [413] 
Path:    /private/var/mobile/Containers/Bundle/Application/1BEE592E-8F9A-413C-A989-3E39AE3EA407/myApp.app/myApp 
Identifier:   ...... 
Version:    12 (1.0) 
Code Type:   ARM (Native) 
Parent Process:  launchd [1] 

Date/Time:   2015-07-03 19:16:50.193 -0700 
Launch Time:   2015-07-03 19:16:35.574 -0700 
OS Version:   iOS 8.3 (12F69) 
Report Version:  105 

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Subtype: KERN_INVALID_ADDRESS at 0x00000000 
Triggered by Thread: 14 


Thread 14 name: AURemoteIO::IOThread 
Thread 14 Crashed: 
0 libsystem_platform.dylib  0x361cdb9e OSAtomicIncrement64Barrier$VARIANT$mp + 6 
1 myApp      0x0008981c renderCallback (ONCAterotAudioController+AudioRenderCallbacks.m:470) 
2 AudioToolbox     0x26f1de8e AUInputElement::PullInput(unsigned long&, AudioTimeStamp const&, unsigned long, unsigned long) + 126 
3 AudioToolbox     0x2700523c AUMatrixMixer::Render(unsigned long&, AudioTimeStamp const&, unsigned long) + 556 
4 AudioToolbox     0x27005ddc AUMatrixMixer::RenderBus(unsigned long&, AudioTimeStamp const&, unsigned long, unsigned long) + 104 
5 AudioToolbox     0x26e456e6 AUBase::DoRenderBus(unsigned long&, AudioTimeStamp const&, unsigned long, AUOutputElement*, unsigned long, AudioBufferList&) + 142 
6 AudioToolbox     0x26e45578 AUBase::DoRender(unsigned long&, AudioTimeStamp const&, unsigned long, unsigned long, AudioBufferList&) + 720 
7 AudioToolbox     0x26e4529a AUMethodRender(void*, unsigned long*, AudioTimeStamp const*, unsigned long, unsigned long, AudioBufferList*) + 42 
8 myApp      0x00088c42 eqCallBack (ONCAterotAudioController+AudioRenderCallbacks.m:115) 
9 AudioToolbox     0x26f1de8e AUInputElement::PullInput(unsigned long&, AudioTimeStamp const&, unsigned long, unsigned long) + 126 
10 AudioToolbox     0x26fc8642 AUDynamicsProcessor::Render(unsigned long&, AudioTimeStamp const&, unsigned long) + 298 
11 AudioToolbox     0x26e456e6 AUBase::DoRenderBus(unsigned long&, AudioTimeStamp const&, unsigned long, AUOutputElement*, unsigned long, AudioBufferList&) + 142 
12 AudioToolbox     0x26e45578 AUBase::DoRender(unsigned long&, AudioTimeStamp const&, unsigned long, unsigned long, AudioBufferList&) + 720 
13 AudioToolbox     0x26e4529a AUMethodRender(void*, unsigned long*, AudioTimeStamp const*, unsigned long, unsigned long, AudioBufferList*) + 42 
14 ONCKit       0x003f2a5e recordCallback (ONCAudioRecordController.m:106) 
15 AudioToolbox     0x26f16480 AUConverterBase::RenderBus(unsigned long&, AudioTimeStamp const&, unsigned long, unsigned long) + 728 
16 AudioToolbox     0x26e456e6 AUBase::DoRenderBus(unsigned long&, AudioTimeStamp const&, unsigned long, AUOutputElement*, unsigned long, AudioBufferList&) + 142 
17 AudioToolbox     0x26e45578 AUBase::DoRender(unsigned long&, AudioTimeStamp const&, unsigned long, unsigned long, AudioBufferList&) + 720 
18 AudioToolbox     0x26f0b4b0 AURemoteIO::PerformIO(unsigned long, unsigned int, unsigned int, AudioTimeStamp const&, AudioTimeStamp const&, AudioBufferList const*, AudioBufferList*, int&) + 488 
19 AudioToolbox     0x26f0c566 AURIOCallbackReceiver_PerformIO + 390 
20 AudioToolbox     0x26f047de _XPerformIO + 162 
21 AudioToolbox     0x26e63938 mshMIGPerform + 188 
22 AudioToolbox     0x26edd760 MSHMIGDispatchMessage + 28 
23 AudioToolbox     0x26f0b7bc AURemoteIO::IOThread::Run() + 116 
24 AudioToolbox     0x26f0ee68 AURemoteIO::IOThread::Entry(void*) + 4 
25 AudioToolbox     0x26e416f2 CAPThread::Entry(CAPThread*) + 206 
26 libsystem_pthread.dylib   0x361d2de8 _pthread_body + 136 
27 libsystem_pthread.dylib   0x361d2d5a _pthread_start + 114 
28 libsystem_pthread.dylib   0x361d0b04 thread_start + 4 


Thread 14 crashed with ARM Thread State (32-bit): 
    r0: 0x00000000 r1: 0x00001294  r2: 0x00000000  r3: 0x00000274 
    r4: 0x0b1094e0 r5: 0x0b109c28  r6: 0x0b109634  r7: 0x0b1095ec 
    r8: 0x00000000 r9: 0x00000000  r10: 0x00000400  r11: 0x00000400 
    ip: 0x3f800000 sp: 0x0b1094e0  lr: 0x00089821  pc: 0x361cdb9e 
    cpsr: 0x80000030 
+0

Тип исключения иногда появляется как EXC_BAD_ACCESS (SIGBUS) EXC_ARM_DA_ALIGN, что заставляет меня задаться вопросом, есть ли какое-то соответствие моим структурам данных, о которых мне нужно беспокоиться. – olynoise

ответ

0

Похоже, что проблема связана с проблемами выравнивания в моей структуре данных.

Добавление

__attribute__ ((aligned (8))) 

в структуры, которые держали счетчик зафиксировал проблему.

+0

Вы уверены, что атомы 64b являются атомарными на ARM32? Это было бы несколько удивительно. – Jeff

+0

В документации (https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/OSAtomicDecrement64.3.html#//apple_ref/doc/man/3/OSAtomicDecrement64) указано: 64-разрядные операции не реализованы для 32-битных процессов на платформах PPC . Но ничего не говорится о ARM32 ... – olynoise

+0

Хотя этот документ до iOS. – olynoise