在QCC3005 的项目中,很容易测试到死机的现象。
复现方法:
在通话过程中触发挂断电话的事件,0.5s内马上关机,就会出现死机现象(复现机率达到50%)。
panic 在如下函数的SinkGetScoHandle处。
void connectionHandleSyncDisconnectReq(const CL_INTERNAL_SYNC_DISCONNECT_REQ_T *req)
{
/* Send a SCO disconnect request to BlueStack */
MAKE_PRIM_T(DM_SYNC_DISCONNECT_REQ);
prim->handle = PanicZero(SinkGetScoHandle(req->audio_sink));;
prim->reason = (uint16)req->reason;
VmSendDmPrim(prim);
}
解决方法:
You can try to modify the code as below:
void connectionHandleSyncDisconnectReq(
const CL_INTERNAL_SYNC_DISCONNECT_REQ_T *req
)
{
/* Send a SCO disconnect request to BlueStack */
MAKE_PRIM_T(DM_SYNC_DISCONNECT_REQ);
+if(SinkGetScoHandle(req->audio_sink))
+{
prim->handle = PanicZero(SinkGetScoHandle(req->audio_sink));;
prim->reason = (uint16)req->reason;
VmSendDmPrim(prim);
+ }
}
Another way is to do the reset when the panic occur.
或者设置芯片PANIC后,芯片进行重置。
评论