亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? msgqdistgrplib.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
                 */                if (! pDistGrpDbNode->pGrpDbGapNode)                    {                    /* GAP node is not initialized by now */                    distGapNodeInit (&dGapNode, pDistGrpDbNode, FALSE);                    pDistGrpDbNode->pGrpDbGapNode = &dGapNode;                    }                 msgQDistGrpDbUnlock();                     semTake (&dGapNode.gapWaitFor, WAIT_FOREVER);                 msgQDistGrpDbLock();            }        if ((pDGapNodeTemp = pDistGrpDbNode->pGrpDbGapNode) != NULL)            {            pDistGrpDbNode->pGrpDbGapNode = NULL;            distGapNodeDelete (pDGapNodeTemp);            }        msgQDistGrpDbUnlock();        /*         * Group exists and has a global state (at least now).         * Add member to group.         */#ifdef MSG_Q_DIST_GRP_REPORT        printf ("msgQDistGrpAdd: add member\n");#endif        msgQDistGrpLclAddMember (pDistGrpDbNode, msgQId);        }    return (pDistGrpDbNode->grpDbMsgQId);   /* retrun MSG_Q_ID */    }/***************************************************************************** msgQDistGrpDelete - delete a distributed message queue from a group (VxFusion option)** This routine deletes a distributed message queue from a group. ** NOTE: For this release, it is not possible to remove a distributed message* queue from a group.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: ERROR, always.** ERRNO: S_distLib_NO_OBJECT_DESTROY** INTERNAL NOTE: Takes <distGrpDbSemaphore>.*/STATUS msgQDistGrpDelete    (    char *   distGrpName,   /* group containing the queue to be deleted */    MSG_Q_ID msgQId         /* ID of the message queue to delete */    )    {#if 0    DIST_MSG_Q_ID  distMsgQId;    DIST_OBJ_ID    objId;#else        UNUSED_ARG(distGrpName);        UNUSED_ARG(msgQId);            errnoSet (S_distLib_NO_OBJECT_DESTROY);    return (ERROR);    /* BY NOW */#endif    /* the rest of this function is not compiled */#if 0    if (ID_IS_DISTRIBUTED (msgQId))        {        objId = ((DIST_OBJ_NODE *) msgQId)->objNodeId;        distMsgQId = DIST_OBJ_ID_TO_DIST_MSG_Q_ID (objId);        }    if (! (ID_IS_DISTRIBUTED (msgQId)) || IS_DIST_MSG_Q_LOCAL (distMsgQId))        {        /* msgQ is local */        SL_NODE                *pNode;        DIST_GRP_DB_NODE    *pDistGrpDbNode;        DIST_GRP_MSG_Q_NODE *pDistGrpMsgQNode;        DIST_GRP_MSG_Q_NODE    *pPrevNode = NULL;        msgQDistGrpDbLock();        pDistGrpDbNode = msgQDistGrpLclFindByName (distGrpName);        msgQDistGrpDbUnlock();        if (pDistGrpDbNode == NULL)            return (ERROR);        for (pNode = SLL_FIRST ((SL_LIST *) &pDistGrpDbNode->grpDbMsgQIdLst);             pNode != NULL;             pNode = SLL_NEXT (pNode))            {            pDistGrpMsgQNode = (DIST_GRP_MSG_Q_NODE *) pNode;            if (pDistGrpMsgQNode->msgQId == msgQId)                {                sllRemove ((SL_LIST *) &pDistGrpDbNode->grpDbMsgQIdLst,                        (SL_NODE *) pDistGrpMsgQNode, (SL_NODE *) pPrevNode);                break;                }                pPrevNode = pDistGrpMsgQNode;            }        }    else        {        /* msgQ is remote */        return (ERROR);        }    return (OK);#endif    }/***************************************************************************** msgQDistGrpAgree - agree on a group identifier (VxFusion option)** This routine determines the DIST_MSG_Q_GRP_ID associated with a* DIST_GRP_DB_NODE .** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: A DIST_MSG_Q_GRP_ID .** NOMANUAL*/DIST_MSG_Q_GRP_ID msgQDistGrpAgree    (    DIST_GRP_DB_NODE *pDistGrpDbNode  /* ptr to database node */    )    {    DIST_MSG_Q_GRP_ID    grpId;    /* Start GAP. */    grpId = distGapStart (pDistGrpDbNode);    return (grpId);    }/***************************************************************************** msgQDistGrpLclSend - send to all group members registrated locally (VxFusion option)** This routine sends a message to locally registered members of a group.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: OK, if successful; ERROR, if not.** NOMANUAL*/LOCAL STATUS msgQDistGrpLclSend    (    DIST_MSG_Q_GRP_SEND_INQ * pInq,          /* pointer to inquiry node */    DIST_MSG_Q_GRP_ID         distMsgQGrpId, /* group on which to send  */    char *                    buffer,        /* message to send         */    UINT                      nBytes,        /* length of message       */    int                       timeout,       /* ticks to wait           */    int                       priority       /* priority                */    )    {    DIST_GRP_DB_NODE * pDistGrpDbNode;    SL_NODE * pNode;    DIST_GRP_MSG_Q_NODE * pDistGrpMsgQNode;    STATUS                status;    int                   tid;    msgQDistGrpDbLock();    pDistGrpDbNode = msgQDistGrpLclFindById (distMsgQGrpId);    msgQDistGrpDbUnlock();    if (pDistGrpDbNode == NULL)        {#ifdef MSG_Q_DIST_GRP_REPORT        printf ("msgQDistGrpLclSend: group 0x%lx is unknown\n",                (u_long) distMsgQGrpId);#endif        pInq->sendInqStatus = MSG_Q_DIST_GRP_STATUS_ILLEGAL_OBJ_ID;        return (ERROR);                    /* illegal object id */        }    /*     * For all members of this group; send'em the message.     * Note: a member does not need to be a local message queue.     */    for (pNode = SLL_FIRST ((SL_LIST *) &pDistGrpDbNode->grpDbMsgQIdLst);            pNode != NULL;            pNode = SLL_NEXT (pNode))        {        pDistGrpMsgQNode = (DIST_GRP_MSG_Q_NODE *) pNode;#ifdef MSG_Q_DIST_GRP_REPORT        printf ("msgQDistGrpLclSend: send message to msgQId %p\n",                pDistGrpMsgQNode->msgQId);#endif        /*         * First try to send with NO_WAIT. If this fails due to a full         * message queue and timeout is not NO_WAIT, spawn a task         * and call msgQSend with the user specified timeout.         */        status = msgQDistSend (pDistGrpMsgQNode->msgQId, buffer, nBytes,                               NO_WAIT, WAIT_FOREVER, priority);        if (status == ERROR)            {#ifdef MSG_Q_DIST_GRP_REPORT            printf ("msgQDistGrpLclSend: msgQDistSend() returned error\n");#endif            if (timeout != NO_WAIT && errno == S_objLib_OBJ_UNAVAILABLE)                {                msgQGrpSendInqLock(pInq);    /* lock inquiry node */                /* timeout is not NO_WAIT and msgQ is full */                pInq->sendInqNumBlocked++;                msgQGrpSendInqUnlock(pInq);    /* unlock inquiry node */                    /* spawn a task that can wait */                tid = taskSpawn (NULL,                                 DIST_MSG_Q_GRP_WAIT_TASK_PRIO,                                 0,                                 DIST_MSG_Q_GRP_WAIT_TASK_STACK_SZ,                                 (FUNCPTR) msgQDistGrpLclSendCanWait,                                 (int) distInqGetId ((DIST_INQ *) pInq),                                 (int) pDistGrpMsgQNode->msgQId,                                 (int) buffer,                                 (int) nBytes,                                 (int) timeout,                                 (int) priority,                                 0, 0, 0, 0);                if (tid == ERROR)                    pInq->sendInqStatus = MSG_Q_DIST_GRP_STATUS_ERROR;                }            else                {                pInq->sendInqStatus = MSG_Q_DIST_GRP_STATUS_ERROR;                }            }        }    if (pInq->sendInqNumBlocked == 0)        {        /* If we leave nobody blocked, decrease the outstanding counter. */        msgQGrpSendInqLock(pInq);    /* lock inquiry node */        if (--pInq->sendInqNumOutstanding == 0)            {            msgQGrpSendInqUnlock(pInq);    /* unlock inquiry node */            semGive (&pInq->sendInqWait);            }        else            msgQGrpSendInqUnlock(pInq);    /* unlock inquiry node */        }    return (OK);    }/***************************************************************************** msgQDistGrpLclSendCanWait - send buffer to local members of a group (VxFusion option)** This routine sends a message to local group members.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: N/A** NOMANUAL*/LOCAL void msgQDistGrpLclSendCanWait    (    DIST_INQ_ID    inqId,         /* inquiry id             */    MSG_Q_ID       msgQId,        /* queue on which to send */    char *         buffer,        /* message to send        */    UINT           nBytes,        /* length of message      */    int            timeout,       /* ticks to wait          */    int            priority       /* priority               */    )    {    DIST_MSG_Q_GRP_SEND_INQ * pInq;    STATUS                    status;    status = msgQDistSend (msgQId, buffer, nBytes, timeout,            WAIT_FOREVER, priority);    if (status == OK)        {        if ((pInq = (DIST_MSG_Q_GRP_SEND_INQ *) distInqFind (inqId)) == NULL)            return;        msgQGrpSendInqLock(pInq);            /* lock inquiry node */        if (--pInq->sendInqNumBlocked == 0)            if (--pInq->sendInqNumOutstanding == 0)                {                msgQGrpSendInqUnlock(pInq);    /* unlock inquiry node */                semGive (&pInq->sendInqWait);                return;                }        msgQGrpSendInqUnlock(pInq);        /* unlock inquiry node */        }    }/***************************************************************************** msgQDistGrpSend - send buffer to local and remote members of a group (VxFusion option)** This routine sends a message to local and remote members of a group.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: OK, if successful; ERROR, is unsuccessful.** NOMANUAL*/STATUS msgQDistGrpSend    (    DIST_MSG_Q_GRP_ID   distMsgQGrpId,  /* group on which to send          */    char *              buffer,         /* message to send                 */    UINT                nBytes,         /* length of message               */    int                 msgQTimeout,    /* ticks to wait at message queues */    int                 overallTimeout, /* ticks to wait overall           */    int                 priority        /* priority                        */    )    {    DIST_PKT_MSG_Q_GRP_SEND    pktSend;    DIST_MSG_Q_GRP_SEND_INQ    inquiryNode;    DIST_INQ_ID                inquiryId;    DIST_IOVEC                 distIOVec[2];    STATUS                     status;    inquiryNode.sendInq.inqType = DIST_MSG_Q_GRP_INQ_TYPE_SEND;    msgQGrpSendInqLockInit (&inquiryNode);    semBInit (&(inquiryNode.sendInqWait), SEM_Q_FIFO, SEM_EMPTY);    inquiryNode.sendInqTask = taskIdSelf();    inquiryNode.sendInqNumBlocked = 0;    inquiryNode.sendInqNumOutstanding =            distNodeGetNumNodes(DIST_NODE_NUM_NODES_ALIVE);    inquiryNode.sendInqStatus = MSG_Q_DIST_GRP_STATUS_OK;    inquiryId = distInqRegister ((DIST_INQ *) &inquiryNode);    status = msgQDistGrpLclSend (&inquiryNode, distMsgQGrpId, buffer, nBytes,                                 msgQTimeout, priority);    if (status == ERROR)        {#ifdef MSG_Q_DIST_GRP_REPORT        printf ("msgQDistGrpSend: group is unknown\n");#endif        distInqCancel ((DIST_INQ *) &inquiryNode);        return (ERROR);        }#ifdef MSG_Q_DIST_GRP_REPORT    if (inquiryNode.sendInqNumBlocked)        printf ("msgQDistGrpSend: %d local agents blocked on queues\n",                inquiryNode.sendInqNumBlocked);#endif    /*     * Broadcast message to the net. Every message addressed to a group     * is broadcasted to the net.     */    pktSend.pktMsgQGrpSendHdr.pktType = DIST_PKT_TYPE_MSG_Q_GRP;    pktSend.pktMsgQGrpSendHdr.pktSubType = DIST_PKT_TYPE_MSG_Q_GRP_SEND;    pktSend.pktMsgQGrpSendInqId = htonl((uint32_t) inquiryId);    pktSend.pktMsgQGrpSendTimeout =            htonl ((uint32_t) DIST_TICKS_TO_MSEC (msgQTimeout));    pktSend.pktMsgQGrpSendId = htons (distMsgQGrpId);    /* use IOV stuff here, since we do not want to copy data */    distIOVec[0].pIOBuffer = &pktSend;    distIOVec[0].IOLen = DIST_PKT_HDR_SIZEOF (DIST_PKT_MSG_Q_GRP_SEND);    distIOVec[1].pIOBuffer = buffer;    distIOVec[1].IOLen = nBytes;#ifdef MSG_Q_DIST_GRP_REPORT    printf ("msgQDistGrpSend: broadcast message\n");#endif    status = distNetIOVSend (DIST_IF_BROADCAST_ADDR, &distIOVec[0], 2,            WAIT_FOREVER, DIST_MSG_Q_PRIO_TO_NET_PRIO (priority));    if (status == ERROR)        {#ifdef MSG_Q_DIST_GRP_REPORT        printf ("msgQDistGrpSend: broadcast failed\n");#endif        distInqCancel ((DIST_INQ *) &inquiryNode);        errnoSet (S_distLib_UNREACHABLE);        return (ERROR);        }    /*     * semTake() blocks the requesting task until the service     * task gives the semaphore, because the request has     * been processed.     */    semTake (&(inquiryNode.sendInqWait), overallTimeout);    distInqCancel ((DIST_INQ *) &inquiryNode);    if (inquiryNode.sendInqNumOutstanding > 0)        {        /* overall timeout */        errnoSet (S_msgQDistLib_OVERALL_TIMEOUT);        return (ERROR);        }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩电影在线免费看| 99精品视频一区二区三区| 欧美一二三区在线| 欧洲另类一二三四区| 99国产精品久| 色哟哟国产精品| 精品一区二区三区日韩| 精品无人码麻豆乱码1区2区| 久久成人久久爱| 国产精品99久久久久久久女警| 日韩国产在线一| 国产欧美一二三区| 国产精品久线在线观看| 最新中文字幕一区二区三区| 日韩欧美一区在线| 日韩精品专区在线影院观看| 色综合久久久久久久| 国产乱对白刺激视频不卡| 国产精品自拍毛片| 99re热这里只有精品免费视频| 久久国产精品99久久人人澡| 亚洲午夜久久久久中文字幕久| 久久久精品国产免大香伊| 欧美精品色综合| 欧美大片在线观看一区| 国产欧美一区二区在线| 综合av第一页| 久久精品在这里| 日韩一区二区三区av| 久久久久国产精品免费免费搜索| 91麻豆精品91久久久久久清纯| 91精品免费在线观看| 2020国产精品久久精品美国| 91精品国产高清一区二区三区蜜臀| 日韩欧美在线123| 国产欧美久久久精品影院| 亚洲女同ⅹxx女同tv| 亚洲高清免费视频| 亚洲综合视频在线观看| 日本人妖一区二区| 国产成人鲁色资源国产91色综| 久久99久久精品| 99re热视频这里只精品| 成人国产亚洲欧美成人综合网| 色天天综合色天天久久| 日韩欧美久久一区| 中文字幕亚洲一区二区av在线| 亚洲福利一区二区三区| 亚洲成人激情社区| 亚洲国产精品一区二区尤物区| 蜜桃久久久久久久| 成人国产精品视频| 不卡电影一区二区三区| 欧美视频中文字幕| 欧美日韩免费在线视频| 国产欧美一区二区精品秋霞影院 | 国产精品国产三级国产aⅴ入口| 精品国偷自产国产一区| 中文字幕日本乱码精品影院| 麻豆精品在线播放| 91九色最新地址| 欧美精选一区二区| 中文字幕av一区二区三区免费看| 中文字幕成人av| 亚洲丝袜自拍清纯另类| 麻豆久久久久久久| 国产成人在线色| 欧美日韩国产一级片| 成人免费一区二区三区视频| 九色综合国产一区二区三区| 在线观看精品一区| 91精品综合久久久久久| 国产精品国产三级国产三级人妇 | 午夜a成v人精品| 99国产精品久| 国产欧美精品一区二区色综合| 麻豆视频观看网址久久| 欧美日本一道本| 精品国产成人系列| 国产精品久久毛片| 一区二区成人在线| eeuss鲁片一区二区三区| 欧美一级日韩免费不卡| 亚洲一区二区成人在线观看| 青青草97国产精品免费观看| 国产精品亚洲专一区二区三区| 成人小视频在线| 国产日韩亚洲欧美综合| 久久精品国产亚洲a| 日韩欧美123| 国产精品第四页| 国产999精品久久久久久| 久久久不卡网国产精品一区| 美洲天堂一区二卡三卡四卡视频| 国产成人鲁色资源国产91色综| 久久综合狠狠综合久久激情 | 99国产精品国产精品久久| 国产亚洲一区二区在线观看| 久久99精品一区二区三区| 日韩欧美中文字幕一区| 国产精品美女久久久久aⅴ国产馆| 一区二区三区美女| 99久久精品国产导航| 69堂成人精品免费视频| 亚洲国产成人精品视频| 欧美三级电影在线观看| 久久久亚洲午夜电影| 亚洲综合精品久久| 在线观看亚洲专区| 亚洲一二三四在线观看| 欧美在线观看你懂的| 亚洲国产三级在线| 国产suv精品一区二区6| 国产欧美精品一区aⅴ影院 | 日韩欧美国产综合一区 | 国产一区二区伦理片| 91国产福利在线| 伊人色综合久久天天人手人婷| 色欧美乱欧美15图片| 国产日韩精品视频一区| 婷婷成人综合网| 日韩三级中文字幕| 亚洲综合丁香婷婷六月香| 国产99久久精品| 日韩一本二本av| 国产精品一二一区| 亚洲特黄一级片| 成人污污视频在线观看| 亚洲蜜臀av乱码久久精品| 国产一区二区三区综合| 国产精品毛片a∨一区二区三区| 97se狠狠狠综合亚洲狠狠| 久久久美女艺术照精彩视频福利播放 | 日韩精品一区第一页| 91免费视频网址| 亚洲成人黄色影院| 欧美亚洲综合另类| 久久99久久99小草精品免视看| 欧美高清www午色夜在线视频| 一区二区日韩电影| 97久久人人超碰| 日韩精品电影在线观看| 欧美视频完全免费看| 久久国产精品露脸对白| 亚洲欧洲99久久| 欧美一区二区三区影视| 成人午夜在线播放| 欧美极品aⅴ影院| 国产剧情一区二区| 精品盗摄一区二区三区| 91女人视频在线观看| 激情图区综合网| 精品久久久久久久久久久久包黑料| 午夜激情久久久| 欧美激情在线一区二区| 国产91在线|亚洲| 亚洲va天堂va国产va久| 久久久亚洲综合| 欧美性猛交xxxx黑人交| 国产不卡视频一区| 日韩av电影免费观看高清完整版 | 国产乱码精品1区2区3区| 国产精品国产三级国产aⅴ中文| 91精品国产高清一区二区三区蜜臀 | 欧美经典三级视频一区二区三区| 欧美日韩国产123区| 不卡一区中文字幕| 亚洲视频综合在线| 日韩免费福利电影在线观看| 美女视频黄频大全不卡视频在线播放 | 精品99一区二区三区| 国产精品99久久久久久久女警| 亚洲午夜视频在线| 国产精品成人在线观看| 久久综合九色综合97婷婷女人| 欧美三级电影网站| 美国三级日本三级久久99| 亚洲自拍偷拍av| 人禽交欧美网站| 亚洲精品一二三四区| 在线成人午夜影院| 色狠狠色噜噜噜综合网| 国产成人精品免费网站| 激情久久五月天| 日本亚洲天堂网| 欧美色国产精品| 麻豆国产91在线播放| 久久久久久一级片| 日韩限制级电影在线观看| 欧美午夜一区二区| 91在线观看一区二区| 国产a精品视频| 国产一区二区不卡| 蜜桃视频在线观看一区二区| 亚洲国产精品二十页| 久久久噜噜噜久久中文字幕色伊伊| 日韩欧美成人午夜| 日韩免费高清av| 一本久久综合亚洲鲁鲁五月天 | 69久久99精品久久久久婷婷|