Binder异常,导致的手机重启

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

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


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值