/**++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @function: Delete a message queue @function name: SDLIB_DeleteMessageQueue @prototype: void SDLIB_DeleteMessageQueue(PSDMESSAGE_QUEUE pQueue) @category: Support_Reference @input: pQueue - message queue to delete @notes: This function flushes the message queue and frees all memory allocated for messages. @see also: SDLIB_CreateMessageQueue @example: Deleting a message queue: if (pMsgQueue != NULL) { SDLIB_DeleteMessageQueue(pMsgQueue); } ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ void _DeleteMessageQueue(PSDMESSAGE_QUEUE pQueue) { PSDMESSAGE_BLOCK pMsg; SDIO_STATUS status; CT_DECLARE_IRQ_SYNC_CONTEXT(); status = CriticalSectionAcquireSyncIrq(&pQueue->MessageCritSection); /* cleanup free list */ while (1) { pMsg = GetFreeMessageBlock(pQueue); if (pMsg != NULL) { KernelFree(pMsg); } else { break; } } /* cleanup any in the queue */ while (1) { pMsg = GetQueuedMessage(pQueue); if (pMsg != NULL) { KernelFree(pMsg); } else { break; } } status = CriticalSectionReleaseSyncIrq(&pQueue->MessageCritSection); CriticalSectionDelete(&pQueue->MessageCritSection); KernelFree(pQueue); }
static void hifCleanupDevice(HIF_DEVICE *device) { int count; CriticalSectionDelete(&device->lock); for (count = 0; count < BUS_REQUEST_MAX_NUM_TOTAL; count++) { if (device->busrequestblob[count].request != NULL){ SDDeviceFreeRequest(device->handle,device->busrequestblob[count].request); device->busrequestblob[count].request = NULL; } } KernelFree(device); }
~GlobalPoolCreateSync() { CriticalSectionDelete(&CritSection); }