コード例 #1
0
ファイル: qLib.c プロジェクト: phoboz/vmx
int qInfo(
    Q_HEAD *pQHead,
    Q_NODE nodeArray[],
    int maxNodes
    )
{
    return Q_INFO(pQHead, nodeArray, maxNodes);
}
コード例 #2
0
ファイル: semSmShow.c プロジェクト: andy345/vxworks5
int semSmInfo
    (
    SM_SEM_ID smSemId,          /* shared semaphore to summarize */
    int idList[],               /* array of shared tcb to be filled in */
    int maxTasks                /* max tasks idList can accommodate */
    )
    {
    Q_FIFO_G_HEAD      pendQ;   /* temporary queue to get info */
    int                numBlk;	/* current number of blocked tasks */
    int                level;	
    SM_SEM_ID volatile smSemIdv = (SM_SEM_ID volatile) smSemId;
    int                tmp;

    kernelState = TRUE;                         /* KERNEL ENTER */

    CACHE_PIPE_FLUSH ();                        /* CACHE FLUSH   [SPR 68334] */
    tmp = smSemIdv->verify;                     /* PCI bridge bug [SPR 68844]*/

    if (SM_OBJ_VERIFY (smSemIdv) != OK)		/* check semaphore */
        {
        windExit ();                            /* KERNEL EXIT */
        return (ERROR);
        }

    /* ENTER LOCKED SECTION */

    if (SM_OBJ_LOCK_TAKE (&smSemId->lock, &level) != OK)
        {
        smObjTimeoutLogMsg ("semInfo", (char *) &smSemId->lock);
        return (ERROR);                         /* can't take lock */
        }

    /* initialize pseudo multi-way Queue */

    pendQ.pLock   = NULL;                       /* we already have the lock */
    pendQ.pFifoQ  = &smSemId->smPendQ;          /* address of actual queue */
    pendQ.pQClass = qFifoGClassId;              /* global fifo multi way Q */

    numBlk = Q_INFO (&pendQ, idList, maxTasks);

    /* EXIT LOCKED SECTION */

    SM_OBJ_LOCK_GIVE (&smSemId->lock, level);

    windExit ();                                /* KERNEL EXIT */

    return (numBlk);                            /* return blocked task count */
    }
コード例 #3
0
ファイル: msgQShow.c プロジェクト: phoboz/vmx
STATUS msgQInfoGet(
    MSG_Q_ID msgQId,
    MSG_Q_INFO *pInfo
    )
{
    STATUS status;
    int level;
    Q_HEAD *pendQ;

    /* Lock interrupts */
    INT_LOCK(level);

    /* Verify object class */
    if (OBJ_VERIFY(msgQId, msgQClassId) != OK)
    {
        INT_UNLOCK(level);
        status = ERROR;
    }
    else
    {
        /* If no messages */
        if (msgQId->msgQ.count == 0)
        {
            pendQ = &msgQId->msgQ.pendQ;
        }
        else
        {
            pendQ = &msgQId->freeQ.pendQ;
        }

        /* If task id list requested */
        if (pInfo->taskIdList != NULL)
        {
            Q_INFO(pendQ, pInfo->taskIdList, pInfo->taskIdListMax);
        }

        /* If message list or number requested */
        if ((pInfo->msgPtrList != NULL) || (pInfo->msgLengthList != NULL))
        {
            pInfo->numMsg = 0;
            if (pInfo->msgListMax > 0)
            {
                Q_EACH(&msgQId->msgQ, msgQInfoEach, pInfo);
            }
        }

        /* Setup info structure */
        pInfo->numMsg         = msgQId->msgQ.count;
        pInfo->numTask        = Q_INFO(pendQ, NULL, 0);
        pInfo->options        = msgQId->options;
        pInfo->maxMsg         = msgQId->maxMsg;
        pInfo->maxMsgLength   = msgQId->maxMsgLength;
        pInfo->sendTimeouts   = msgQId->sendTimeouts;
        pInfo->reciveTimeouts = msgQId->reciveTimeouts;

        /* Unlock interrupts */
        INT_UNLOCK(level);
        status = OK;
    }

    return status;
}