在项目开发中遇到一个问题,使用HIDL 传输数据在多次调用获取数据时会偶现一个crash问题。对应的message如下:
Abort message: 'Status.cpp:149] Failed HIDL return status not checked: Status(EX_TRANSACTION_FAILED): 'FAILED_TRANSACTION: ''
在kernel log中找到错误信息如下:
[32m[ 140.128393] [33mbinder_alloc[31m: 2413: binder_alloc_buf size 176024 failed, no address space
[32m[ 140.128409] [33mbinder_alloc[31m: allocated: 704272 (num: 6 largest: 176152), free: 336112 (num: 3 largest: 175896)
binder在传输时没有可用的buffer可用。
原因,binder在传输时有概率出现传输失败。
解决办法:在调用hidl接口返回数据的同时,判断函数调用的返回值。
例如 Return<void> ret = mBinder->Func(int param1,int param2,[&](int result, const vec<uint8> &data){
// do something
});
// 需要加上这个判断否则程序会被终止掉
if(!ret->isOk()) {
return false;
}
为什么有概率出现传输失败还有调查清楚,有了解的大神请告知谢谢。
探讨了在项目开发中使用HIDL进行数据传输时遇到的偶发crash问题,详细解析了binder在传输数据时可能出现的buffer不足情况及解决策略。
7784





