我已经遭受这个错误好几天了。帮助我,如果你知道任何可能有帮助的东西。
我使用相机框架来让我的硬件工作。大多数时候,它工作正常。但是,有时活页夹会杀死我服务器的主线程,因为条件“bwr.write_consumed < mOut.dataSize()”满足如下。
当客户端调用服务器并且服务器执行某些操作时会发生这种情况,然后返回,因为需要用户输入才能完成任务。然后在所有工作完成后,服务器将向客户端发送一条消息以通知他结果。
Q1:“bwr.write_consumed < mOut.dataSize()”是否意味着binder没有得到我发送给它的所有数据?
Q2:这怎么可能?这是否意味着我的客户已关闭?
任何想法都可能会有所帮助。
谢谢
IPCThreadState.cpp::talkWithDriver()
if (err >= NO_ERROR) {
if (bwr.write_consumed > 0) {
if (bwr.write_consumed < mOut.dataSize())
mOut.remove(0, bwr.write_consumed);
else
mOut.setDataSize(0);
}
调用栈
signal 5 (SIGTRAP), code 1 (TRAP_BRKPT), fault addr 0x3e80000082e
Stack frame #00 pc 000000000000d270 /system/lib64/libcutils.so (__android_log_assert+236)
Stack frame #01 pc 000000000002de34 /system/lib64/libbinder.so (android::Parcel::remove(unsigned long, unsigned long)+28)
Stack frame #02 pc 0000000000029a34 /system/lib64/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+412)
Stack frame #03 pc 000000000002a394 /system/lib64/libbinder.so (android::IPCThreadState::waitForResponse(android::Parcel*, int*)+116)
Stack frame #04 pc 000000000002a628 /system/lib64/libbinder.so (android::IPCThreadState::transact(int, unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+216)
Stack frame #05 pc 0000000000022348 /system/lib64/libbinder.so (android::BpBinder::transact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+64)