STATUS getPendingMsgQByHashVal()

in main/AppMessageQueue.c [139:178]


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((stackQueueGetIterator(pConnections, &iterator)));
    while (iterate && IS_VALID_ITERATOR(iterator)) {
        CHK_STATUS((stackQueueIteratorGetItem(iterator, &data)));
        CHK_STATUS((stackQueueIteratorNext(&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((stackQueueRemoveItem(pConnections, data)));
            }
        }
    }

CleanUp:

    if (ppPendingMsgQ != NULL) {
        *ppPendingMsgQ = pPendingMsgQ;
    }

    return retStatus;
}