Android上经常可以碰到一些不可思议的crash,初看没有什么思路,如果从持锁竞争角度来看,两个线程同时操作同一个变量,便会有不可思议的crash
如:
/system/lib/libc.so (abort+63)
/system/lib/liblog.so (__android_log_assert+154)
/system/lib/libstagefright_foundation.so (android::MetaData::findInt32(unsigned int, int*)+144)
/system/lib/libstagefright.so (android::convertMetaDataToMessage(android::sp<android::MetaData> const&, android::sp<android::AMessage>*)+582)
/system/lib/libmediaplayerservice.so (android::NuPlayer::HTTPLiveSource::getFormat(bool)+54)
/system/lib/libmediaplayerservice.so (android::NuPlayer::onMessageReceived(android::sp<android::AMessage> const&)+3240)
/system/lib/libstagefright_foundation.so (android::AHandler::deliverMessage(android::sp<android::AMessage> const&)+24)
/system/lib/libstagefright_foundation.so (android::AMessage::deliver()+60)
/system/lib/libstagefright_foundation.so (android::ALooper::loop()+470)
/system/lib/libutils.so (android::Thread::_threadLoop(void*)+270)
/system/lib/libc.so (__pthread_start(void*)+22)
/system/lib/libc.so (__start_thread+32)
初看 MetaData的findInt32方法是android很基础的一个方法,不可能会出现crash啊
先使用stack反汇编看一下crash的位置
Stack Trace:
RELADDR