手机出现重启,拿到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:

Binder异常,导致的手机重启


Abnormal flow:

Binder异常,导致的手机重启


所以,这里的BR_TRANSACTION_COMPLETE,可以说是一个无效指令,这里我们可以不作处理,


在IPCThreadState.cpp中

    case BR_SPAWN_LOOPER:
        mProcess->spawnPooledThread(false);

        break;

 下面,增加一个

   case BR_TRANSACTION_COMPLETE:

       break;

的无效处理即可解决此问题,


相关文章:

  • 2021-04-04
  • 2021-07-22
  • 2022-02-23
  • 2022-12-23
  • 2021-11-11
  • 2022-12-23
  • 2022-02-17
  • 2022-12-23
猜你喜欢
  • 2021-04-30
  • 2022-12-23
  • 2022-12-23
  • 2019-06-21
  • 2022-02-01
  • 2018-10-31
相关资源
相似解决方案