繁体   English   中英

当服务器向客户端发送 msg 时,android 本机绑定器崩溃

[英]android native binder crash while server send msg to client

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

我使用相机框架来让我的硬件工作。 大多数情况下,它都能正常工作。 但是,有时活页夹会杀死我服务器的主线程,因为“bwr.write_consumed < mOut.dataSize()”满足如下条件。

当客户端调用服务器并且服务器执行某些操作时会发生这种情况,然后由于需要用户输入来完成任务而返回。 然后在所有工作完成后,服务器将向客户端发送一条 msg 以通知他结果。

Q1:“bwr.write_consumed < mOut.dataSize()”是不是表示绑定器没有得到我发送给它的所有数据?

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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM