手机出现重启,拿到LOG之后,先解开看一 下栈 信息
systemServer发生NE错误,进一步看,
#00 pc 000000000006d7b4 /system/lib64/libc.so (tgkill+8)
#01 pc 000000000006abd4 /system/lib64/libc.so (pthread_kill+64)
#02 pc 0000000000024098 /system/lib64/libc.so (raise+24)
#03 pc 000000000001c93c /system/lib64/libc.so (abort+52)
#04 pc 0000000000055f4c /system/lib64/libbinder.so (_ZN7android14IPCThreadState14joinThreadPoolEb+208)
#05 pc 0000000000072a94 /system/lib64/libbinder.so
#06 pc 0000000000012604 /system/lib64/libutils.so (_ZN7android6Thread11_threadLoopEPv+272)
#07 pc 00000000000a3aac /system/lib64/libandroid_runtime.so (_ZN7android14AndroidRuntime15javaThreadShellEPv+128)
#08 pc 000000000006a3bc /system/lib64/libc.so (_ZL15__pthread_startPv+208)
#09 pc 000000000001dba8 /system/lib64/libc.so (__start_thread+16)
发现是线程主动abort,
且在main log中发现:
05-07 19:50:59.275318 1180 1191 *** BAD COMMAND 29190 received from Binder driver
05-07 19:50:59.275319 1180 1191 E IPCThreadState: getAndExecuteCommand(fd=8) returned unexpected error -2147483648, aborting
在代码中是:
if (result < NO_ERROR && result != TIMED_OUT && result != -ECONNREFUSED && result != -EBADF) {
ALOGE("getAndExecuteCommand(fd=%d) returned unexpected error %d, aborting",
mProcess->mDriverFD, result);
abort();
}
说明是binder在与binder驱动交互过程,也就是读取下一条命令时,发生了错误,
而29190 在binder中代表的是BR_TRANSACTION_COMPLETE,说明接收了一个错误的指令导致 ,
nornal flow:
Abnormal flow:
所以,这里的BR_TRANSACTION_COMPLETE,可以说是一个无效指令,这里我们可以不作处理,
在IPCThreadState.cpp中
case BR_SPAWN_LOOPER:
mProcess->spawnPooledThread(false);
break;
下面,增加一个
case BR_TRANSACTION_COMPLETE:
break;
的无效处理即可解决此问题,