/* * ======== DeleteMsgMgr ======== */ static void DeleteMsgMgr(struct MSG_MGR *hMsgMgr) { DBC_Require(MEM_IsValidHandle(hMsgMgr, MSGMGR_SIGNATURE)); if (hMsgMgr->queueList) { if (LST_IsEmpty(hMsgMgr->queueList)) { LST_Delete(hMsgMgr->queueList); hMsgMgr->queueList = NULL; } } if (hMsgMgr->msgFreeList) { FreeMsgList(hMsgMgr->msgFreeList); hMsgMgr->msgFreeList = NULL; } if (hMsgMgr->msgUsedList) { FreeMsgList(hMsgMgr->msgUsedList); hMsgMgr->msgUsedList = NULL; } if (hMsgMgr->hSyncEvent) SYNC_CloseEvent(hMsgMgr->hSyncEvent); if (hMsgMgr->hSyncCS) SYNC_DeleteCS(hMsgMgr->hSyncCS); MEM_FreeObject(hMsgMgr); }
/* * ======== DeleteMsgQueue ======== */ static void DeleteMsgQueue(struct MSG_QUEUE *hMsgQueue, u32 uNumToDSP) { struct MSG_MGR *hMsgMgr; struct MSG_FRAME *pMsg; u32 i; if (!MEM_IsValidHandle(hMsgQueue, MSGQ_SIGNATURE) || !hMsgQueue->hMsgMgr || !hMsgQueue->hMsgMgr->msgFreeList) goto func_end; hMsgMgr = hMsgQueue->hMsgMgr; /* Pull off uNumToDSP message frames from Msg manager and free */ for (i = 0; i < uNumToDSP; i++) { if (!LST_IsEmpty(hMsgMgr->msgFreeList)) { pMsg = (struct MSG_FRAME *)LST_GetHead(hMsgMgr-> msgFreeList); MEM_Free(pMsg); } else { /* Cannot free all of the message frames */ break; } } if (hMsgQueue->msgFreeList) { FreeMsgList(hMsgQueue->msgFreeList); hMsgQueue->msgFreeList = NULL; } if (hMsgQueue->msgUsedList) { FreeMsgList(hMsgQueue->msgUsedList); hMsgQueue->msgUsedList = NULL; } if (hMsgQueue->hNtfy) NTFY_Delete(hMsgQueue->hNtfy); if (hMsgQueue->hSyncEvent) SYNC_CloseEvent(hMsgQueue->hSyncEvent); if (hMsgQueue->hSyncDone) SYNC_CloseEvent(hMsgQueue->hSyncDone); if (hMsgQueue->hSyncDoneAck) SYNC_CloseEvent(hMsgQueue->hSyncDoneAck); MEM_FreeObject(hMsgQueue); func_end: return; }
MsgList CurMsgListOrCurMsg(Toc toc) { MsgList result; Msg curmsg; result = TocCurMsgList(toc); if (result->nummsgs == 0 && (curmsg = TocGetCurMsg(toc))) { FreeMsgList(result); result = MakeSingleMsgList(curmsg); } return result; }