summaryrefslogtreecommitdiffstats
path: root/domx
diff options
context:
space:
mode:
Diffstat (limited to 'domx')
-rwxr-xr-xdomx/omx_rpc/src/omx_rpc.c24
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");