Co dokładnie powoduje błąd „spin on suspend” w systemie Android?
Obecnie mam problem z debugowaniem kodu Android, który opiera się na rodzimej bibliotece. Jedna natywna rozmowa wydaje się szczególnie podatna na błąd „spin on suspend”. Zwykle manifestuje się tak:
threadid=2: spin on suspend #2 threadid=48 (pcf=3)
Do tej pory nie byłem w stanie dokładnie określić, co tutaj zawodzi, z tym wyjątkiem, że po około 10 tych komunikatach moja aplikacja napotyka aSIGSTKFLT
i wychodzi. Za każdym razem pierwszy wątek to GC, a drugi wątek jest tym, co aktualnie wykonuje natywny kod. Część stosu wydrukowana wraz z tym komunikatem zawsze ma metodę natywną na szczycie stosu.
Co dokładnie dzieje się, gdy Dalvik narzeka na to i jak mogę zacząć debugować przyczynę, aby to naprawić?
EDYTOWAĆ: Ciekawa zmarszczka - po wprowadzeniu zmian przez rodzimego programistę czasami widzę następujący błąd:
PopFrame missed the break
VM aborting
Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1)
Jest też dla mnie bardzo dziwne, że zrzut wątku pokazuje moją rodzimą metodę na szczycie stosu, ale stan wątku jestRUNNABLE
, nieNATIVE
- jak to możliwe?