0

我已经遭受这个错误好几天了。帮助我,如果你知道任何可能有帮助的东西。

我使用相机框架来让我的硬件工作。大多数时候,它工作正常。但是,有时活页夹会杀死我服务器的主线程,因为条件“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)
4

1 回答 1

1

我终于得到了根本案例。这是因为我使用 fasync 转发消息(将通过活页夹)。如果安排了新任务,fasync 将挂起未完成的任务。该问题可能在特定时间出现。

于 2016-03-29T03:48:02.113 回答