diff options
Diffstat (limited to 'domx')
-rwxr-xr-x | domx/omx_rpc/src/omx_rpc.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/domx/omx_rpc/src/omx_rpc.c b/domx/omx_rpc/src/omx_rpc.c index 0743491..e78d92b 100755 --- a/domx/omx_rpc/src/omx_rpc.c +++ b/domx/omx_rpc/src/omx_rpc.c @@ -369,10 +369,26 @@ void *RPC_CallbackThread(void *data) pBuffer = NULL; break; default: - eError = - TIMM_OSAL_WriteToPipe(pRPCCtx-> - pMsgPipe[nFxnIdx], &pBuffer, - RPC_MSG_SIZE_FOR_PIPE, TIMM_OSAL_SUSPEND); + if (((struct omx_packet *) pBuffer)->result == OMX_ErrorHardware) + { + //On a true OMX_ErrorHardware error, send the global error packet + //and release the local allocated packet to avoid memory leaks since + //the listener will not free the packet on OMX_ErrorHardware errors. + RPC_freePacket(pBuffer); + pBuffer = NULL; + ((struct omx_packet *) pBufferError)->result = OMX_ErrorHardware; + eError = TIMM_OSAL_WriteToPipe(pRPCCtx->pMsgPipe[nFxnIdx], + &pBuff, + RPC_MSG_SIZE_FOR_PIPE, + TIMM_OSAL_SUSPEND); + } + else + { + eError = TIMM_OSAL_WriteToPipe(pRPCCtx->pMsgPipe[nFxnIdx], + &pBuffer, + RPC_MSG_SIZE_FOR_PIPE, + TIMM_OSAL_SUSPEND); + } RPC_assert(eError == TIMM_OSAL_ERR_NONE, RPC_OMX_ErrorUndefined, "Write to pipe failed"); |