Android O 以后版本Failed HIDL return status not checked: Status(EX_TRANSACTION_FAILED): 'FAILED_TRANSACT

探讨了在项目开发中使用HIDL进行数据传输时遇到的偶发crash问题,详细解析了binder在传输数据时可能出现的buffer不足情况及解决策略。

在项目开发中遇到一个问题,使用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;

}

 

为什么有概率出现传输失败还有调查清楚,有了解的大神请告知谢谢。

12-05 15:33:32.892 D/BaiduFaceProxy( 3642): faceDetect 12-05 15:33:34.691 I/binder ( 3805): 369:3805 transaction failed 29201/-28, size 1480-0 line 3346 12-05 15:33:32.949 D/Data-FaceSDKManager( 3642): onTrack>> setRgbDetectDuration: 37 12-05 15:33:32.950 I/FaceInfo( 3642): onTrack>>>>>>>>>>>>>>>>>> faceInfos[0]: 146.16104 height: 169.1389 12-05 15:33:32.961 D/##TEST##false( 3642): onLivenessCheck >> 开始 false 12-05 15:33:32.961 D/##TEST##false( 3642): onQualityCheck start 12-05 15:33:34.779 I/binder ( 3805): 369:3805 transaction failed 29201/-28, size 1480-0 line 3346 12-05 15:33:33.014 E/BpTransactionCompletedListener( 191): Failed to transact (-2147483646) 12-05 15:33:33.014 D/BaiduFaceProxy( 3642): faceDetect 12-05 15:33:34.794 I/binder ( 324): 191:324 transaction failed 29201/-28, size 424-32 line 3346 12-05 15:33:33.051 E/BpTransactionCompletedListener( 191): Failed to transact (-2147483646) 12-05 15:33:34.832 I/binder ( 324): 191:324 transaction failed 29201/-28, size 424-32 line 3346 12-05 15:33:34.837 I/binder ( 435): 369:435 transaction failed 29201/-28, size 188-0 line 3346 12-05 15:33:34.839 I/binder ( 3805): 369:3805 transaction failed 29201/-28, size 1480-0 line 3346 12-05 15:33:33.075 D/Data-FaceSDKManager( 3642): onTrack>> setRgbDetectDuration: 49 12-05 15:33:33.075 I/FaceInfo( 3642): onTrack>>>>>>>>>>>>>>>>>> faceInfos[0]: 146.02373 height: 168.47238 12-05 15:33:33.081 D/FaceProxy( 3642): onRecogFail result: 10 12-05 15:33:33.108 E/BpTransactionCompletedListener( 191): Failed to transact (-2147483646) 12-05 15:33:33.217 D/BaiduFaceProxy( 3642): faceDetect 12-05 15:33:33.241 D/Data-FaceSDKManager( 3642): onTrack>> setRgbDetectDuration: 12 12-05 15:33:33.241 I/FaceInfo( 3642): onTrack>>>>>>>>>>>>>>>>>> faceInfos[0]: 145.03204 height: 169.48232 12-05 15:33:33.247 D/FaceProxy( 3642): onRecogFail result: 10 12-05 15:33:33.264 D/##TEST##( 3642): onDetect >> 成功 12-05 15:33:33.265 D/##TEST##false( 3642): onLivenessCheck >> 000001 12-05 15:33:33.265 D/##TEST##false( 3642): onLivenessCheck >> 000003 12-05 15:33:33.265 E/illum ( 3642): illum = 0.9883871 12-05 15:33:33.265 D/##TEST##false( 3642): onLivenessCheck >> 000005 12-05 15:33:33.265 D/##TEST##false( 3642): onLivenessCheck >> 000006 12-05 15:33:33.265 D/##TEST##false( 3642): onLivenessCheck >> 特征提取+人脸检索开始 12-05 15:33:33.265 D/##TEST##false( 3642): onLivenessCheck >> 特征提取+人脸检索开始11 12-05 15:33:33.265 D/##TEST##( 3642): 混合模态 12-05 15:33:33.282 E/BLASTBufferQueue( 3642): [VRI[NavHostActivity]#3](f:0,a:2) Faking releaseBufferCallback from transactionCompleteCallback 7439 12-05 15:33:33.352 D/BaiduFaceProxy( 3642): faceDetect
最新发布
12-06
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值