in source/src/AppMessageQueue.c [140:179]
STATUS getPendingMsgQByHashVal(PConnectionMsgQ pConnectionMsgQ, UINT64 clientHash, BOOL remove, PPendingMessageQueue* ppPendingMsgQ)
{
STATUS retStatus = STATUS_SUCCESS;
PStackQueue pConnections = NULL;
PPendingMessageQueue pPendingMsgQ = NULL;
StackQueueIterator iterator;
UINT64 data;
BOOL iterate = TRUE;
CHK((pConnectionMsgQ != NULL) && (ppPendingMsgQ != NULL), STATUS_APP_MSGQ_NULL_ARG);
pConnections = pConnectionMsgQ->pMsqQueue;
CHK_STATUS((appQueueGetIterator(pConnections, &iterator)));
while (iterate && IS_VALID_ITERATOR(iterator)) {
CHK_STATUS((appQueueIteratorGetItem(iterator, &data)));
CHK_STATUS((appQueueIteratorNext(&iterator)));
pPendingMsgQ = (PPendingMessageQueue) data;
if (clientHash == pPendingMsgQ->hashValue) {
*ppPendingMsgQ = pPendingMsgQ;
iterate = FALSE;
// Check if the item needs to be removed
if (remove) {
// This is OK to do as we are terminating the iterator anyway
CHK_STATUS((appQueueRemoveItem(pConnections, data)));
}
}
}
CleanUp:
if (ppPendingMsgQ != NULL) {
*ppPendingMsgQ = pPendingMsgQ;
}
return retStatus;
}