В одной из наших iOS живых игр FMOD Ex дает сбой со следующей трассировкой стека:
0 fragment.c - Line 87 oc_restore_fpu_c + 87
1 fragment.c - Line 87 oc_restore_fpu_c + 87
2 fragment.c - Line 87 oc_restore_fpu_c + 87
3 fragment.c - Line 87 oc_restore_fpu_c + 87
4 fragment.c - Line 87 oc_restore_fpu_c + 87
5 fragment.c - Line 87 oc_restore_fpu_c + 87
6 fragment.c - Line 87 oc_restore_fpu_c + 87
7 fragment.c - Line 87 oc_restore_fpu_c + 87
8 fragment.c - Line 87 oc_restore_fpu_c + 87
9 FMOD::Thread::callback(void*) + 148
10 FMOD_OS_Thread_Callback(void*) + 76
11 libsystem_pthread.dylib _pthread_start + 156
12 libsystem_pthread.dylib thread_start + 8
oc_restore_fpu_ c - это функция в библиотеке Theora, libtheora/lib/fragment.c
. Но это часто определяется как пустая функция.
Кто-нибудь знает, как стек вызовов может стать рекурсивным? Я думал о том, что рамка вызова может быть повреждена в FMOD, но я не делаю ничего особенного с этой библиотекой. Даже используйте Mutexes для доступа к моим собственным данным, когда я получаю обратный вызов.
Редактировать
Просматривая Crashlytics, я заметил похожий след стека, на этот раз заканчивающийся:
0 FMOD::ChannelGroupI::validate(FMOD::ChannelGroup*, FMOD::ChannelGroupI**, FMOD::SystemLockScope*) + 32
1 FMOD::ChannelControl::getDSP(int, FMOD::DSP**) + 72
2 FMOD::ChannelControl::getDSP(int, FMOD::DSP**) + 72
3 fragment.c - Line 87 oc_restore_fpu_c + 87
4 fragment.c - Line 87 oc_restore_fpu_c + 87
5 fragment.c - Line 87 oc_restore_fpu_c + 87
Может быть, это дает больше контекста.