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

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

?? distnodelib.c

?? vxworks的源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
                }            return (ERROR);            }        case DIST_CTL_CRASHED_HOOK:            {            for (i = 0; i < DIST_NODE_MAX_HOOKS; i++)                {                if (distNodeCrashedHook[i] == NULL)                    {                    distNodeCrashedHook[i] = (FUNCPTR) arg;                    return (OK);                    }                }            return (ERROR);            }        case DIST_CTL_GET_LOCAL_ID:            return (distNodeLocalId);        case DIST_CTL_GET_LOCAL_STATE:            return (distNodeLocalState);        case DIST_CTL_NACK_SUPPORT:            if ((BOOL) arg != TRUE && (BOOL) arg != FALSE)                return (ERROR);            distNodeSupportNACK = (BOOL) arg;            return (OK);        case DIST_CTL_PGGYBAK_BRDCST_SUPPORT:            if ((BOOL) arg != TRUE && (BOOL) arg != FALSE)                return (ERROR);            distNodeSupportPBB = (BOOL) arg;            return (OK);        case DIST_CTL_PGGYBAK_UNICST_SUPPORT:            if ((BOOL) arg != TRUE && (BOOL) arg != FALSE)                return (ERROR);            distNodeSupportPBU = (BOOL) arg;            return (OK);        default:            errnoSet (S_distLib_UNKNOWN_REQUEST);            return (ERROR);        }    }/***************************************************************************** distNodeSendBootstrap - send a bootstrap packet (VxFusion option)** This routine sends a bootstrap packet.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: OK, if packet sent.* NOMANUAL*/LOCAL STATUS distNodeSendBootstrap    (    DIST_NODE_ID dest,     /* destination node */    int          type,     /* bootstrap type */    int          timeout   /* xmit timeout */    )    {    DIST_TBUF_HDR * pTBufHdr;    DIST_PKT_BOOT * pPkt;    DIST_TBUF *     pTBuf;        if ((pTBufHdr = DIST_TBUF_HDR_ALLOC ()) == NULL)        return (ERROR);             /* out of TBufs */    pTBufHdr->tBufHdrPrio = DIST_BOOTSTRAP_PRIO;    pTBufHdr->tBufHdrDest = dest;    pTBufHdr->tBufHdrOverall = sizeof (*pPkt);    pTBufHdr->tBufHdrTimo = timeout;            if ((pTBuf = DIST_TBUF_ALLOC ()) == NULL)        {        DIST_TBUF_FREEM (pTBufHdr);        return (ERROR);                /* out of TBufs */        }            pTBuf->tBufFlags = DIST_TBUF_FLAG_HDR | DIST_TBUF_FLAG_BROADCAST;    pTBuf->tBufType = DIST_TBUF_TTYPE_BOOTSTRAP;    pTBuf->tBufSeq = 0;    pTBuf->tBufNBytes = sizeof (*pPkt);    pPkt = (DIST_PKT_BOOT *) pTBuf->pTBufData;        DIST_TBUF_ENQUEUE (pTBufHdr, pTBuf);    pPkt->pktBootType = (UINT8) type;    return (distNodePktSend (pTBufHdr));    }/***************************************************************************** distNodeBootstrap - broadcast a bootstrap packet (VxFusion option)** This routine broadcasts a bootstrap packet.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: OK, if broadcast succeeds.* NOMANUAL*/STATUS distNodeBootstrap    (    int    timeout   /* xmit timeout */    )    {    STATUS status;    status = distNodeSendBootstrap (DIST_IF_BROADCAST_ADDR,                                    DIST_BOOTING_REQ, timeout);    return (status);    }/***************************************************************************** distNodeFindById - find node in node database (VxFusion option)** This routine tries to find the information node with node id <nodeId>* in the node database.** This routine takes <distNodeDbLock>.  Usually, it will be called with* the lock already taken, but not always, so the lock is taken here* to be safe.** RETURNS: Pointer to the node entry, or NULL if not found.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** NOMANUAL*/LOCAL DIST_NODE_DB_NODE * distNodeFindById    (    DIST_NODE_ID    nodeId   /* ID of node to find */    )    {    DIST_NODE_DB_NODE   distNodeMatch;    DIST_NODE_DB_NODE * pDistNodeFound;    distNodeMatch.nodeId = nodeId;        DIST_NODE_DB_LOCK;    pDistNodeFound =       (DIST_NODE_DB_NODE *) hashTblFind (distNodeDbId,                                          (HASH_NODE *) &distNodeMatch,                                          KEY_CMP_ARG);    DIST_NODE_DB_UNLOCK;    return (pDistNodeFound);    }/***************************************************************************** distNodeCreate - create a new node (VxFusion option)** This routine creates a new node with id <distNodeId>.* distNodeCreate() returns a pointer to the DB entry.** This function takes the DB node database lock before inserting the* node into the database.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: Pointer to node, or NULL.* NOMANUAL*/DIST_NODE_DB_NODE * distNodeCreate    (    DIST_NODE_ID    nodeId,   /* ID for new node */    int             state     /* state of new node */    )    {    DIST_NODE_DB_NODE * pNodeNew;    DIST_NODE_BFLD *    pBFld;    int                 sz;    /* This node is new to the database. */#ifdef DIST_NODE_REPORT    distLog("distNodeCreate: Creating node 0x%lx with state %d\n",            nodeId, state);#endif    /* allocate needed space; quit if we can't get it */        pNodeNew = (DIST_NODE_DB_NODE *) malloc (sizeof (DIST_NODE_DB_NODE));    if (pNodeNew == NULL)        {        distStat.memShortage++;        return (NULL);        }    sz = DIST_NODE_BFLD_SIZEOF (DIST_IF_RNG_BUF_SZ);    pBFld = (DIST_NODE_BFLD *) malloc (4 * sz);    if (pBFld == NULL)        {        free(pNodeNew);          /* no memory leaks here */        distStat.memShortage++;        return (NULL);        }    /* now fill in DIST_NODE_DB_NODE info */    bzero ((char *) pNodeNew, sizeof (DIST_NODE_DB_NODE));    pNodeNew->nodeId = nodeId;    pNodeNew->nodeBroadcast.commAckLastRecvd = (INT16) winSub (0, 1);    pNodeNew->nodeState = state;    distNodeNumNodesAll++;    if (DIST_NODE_STATE_IS_ALIVE (state))        distNodeNumNodesAlive++;    if (state == DIST_NODE_STATE_OPERATIONAL)        distNodeNumNodesOperational++;    pNodeNew->nodeState = state;    bzero ((char *) pBFld, 2 * sz);    pNodeNew->nodeUnicast.pCommCompleted = pBFld;    pNodeNew->nodeBroadcast.pCommCompleted = ((char *) pBFld) + sz;        /* now link the node into the data base */        DIST_NODE_DB_LOCK;    hashTblPut (distNodeDbId, (HASH_NODE *)pNodeNew);    DIST_NODE_DB_UNLOCK;    return (pNodeNew);    }/***************************************************************************** distNodeSetState - set state of a node (VxFusion option)** This routine is used to change the state of a node.  It is only called* from two places in distNodeReassemble() which takes the node DB lock.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: N/A* NOMANUAL*/LOCAL void distNodeSetState    (    DIST_NODE_DB_NODE * pNode,     /* node */    int                 newState   /* new state */    )    {    int             curState = pNode->nodeState;    DIST_NODE_ID    nodeId   = pNode->nodeId;    int             i;#ifdef DIST_DIAGNOSTIC    if (curState != newState)        distLog ("distNodeSetState: state of node 0x%lx shifts from %s to %s\n",                 nodeId,                 distNodeStateToName (curState),                 distNodeStateToName (newState));#endif    if ((! DIST_NODE_STATE_IS_ALIVE (curState)) &&         DIST_NODE_STATE_IS_ALIVE (newState))        {        distNodeNumNodesAlive++;        }            if (DIST_NODE_STATE_IS_ALIVE (curState) &&        (! DIST_NODE_STATE_IS_ALIVE (newState)))        {        distNodeNumNodesAlive--;        }    if (curState < DIST_NODE_STATE_OPERATIONAL &&            newState == DIST_NODE_STATE_OPERATIONAL)        {        distNodeNumNodesOperational++;        for (i = 0; i < DIST_NODE_MAX_HOOKS; i++)            {            if (distNodeOperationalHook[i] != NULL)                (* (distNodeOperationalHook[i])) (nodeId);            }        pNode->nodeState = newState;        return;        }    if (curState == DIST_NODE_STATE_OPERATIONAL &&        newState < DIST_NODE_STATE_OPERATIONAL)        {        distNodeNumNodesOperational--;        if (newState == DIST_NODE_STATE_CRASHED)            {            for (i = 0; i < DIST_NODE_MAX_HOOKS; i++)                {                if (distNodeCrashedHook[i] != NULL)                    (* (distNodeCrashedHook[i])) (nodeId);                }            }        pNode->nodeState = newState;        return;        }    pNode->nodeState = newState;    }/***************************************************************************** distNodeOperational - sets a node to be alive (VxFusion option)** This routine changes the state of the node with the id <distNodeId>* to OPERATIONAL.** This routine takes <distNodeDbLock>.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: Pointer to node, or NULL.* NOMANUAL*/DIST_NODE_DB_NODE * distNodeOperational    (    DIST_NODE_ID   distNodeId  /* node ID */    )    {    DIST_NODE_DB_NODE * pNodeFound;    int                 i;    DIST_NODE_DB_LOCK;         if ((pNodeFound = distNodeFindById (distNodeId)) != NULL)        {        /*         * This node is already in the node database. If state is already         * OPERATIONAL, do nothing - we even have not recognized the absence.         */        if (! DIST_NODE_IS_ALIVE (pNodeFound))            distNodeNumNodesAlive++;        if (pNodeFound->nodeState < DIST_NODE_STATE_OPERATIONAL)            {#ifdef DIST_DIAGNOSTIC        distLog ("distNodeOperational: Set node 0x%lx to state OPERATIONAL\n",                distNodeId);#endif            distNodeNumNodesOperational++;            for (i = 0; i < DIST_NODE_MAX_HOOKS; i++)                {                if (distNodeOperationalHook[i] != NULL)                    (* (distNodeOperationalHook[i])) (distNodeId);                }            }        pNodeFound->nodeState = DIST_NODE_STATE_OPERATIONAL;        }        DIST_NODE_DB_UNLOCK;        return (pNodeFound);    }/***************************************************************************** distNodeCrashed - sets a node to be dead (VxFusion option)** This routine changes the state of the node with the id <distNodeId>* to CRASHED.** This routine takes <distNodeDbLock>.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: Pointer to node, or NULL.* NOMANUAL*/DIST_NODE_DB_NODE * distNodeCrashed    (    DIST_NODE_ID    distNodeId  /* node ID */    )    {    DIST_NODE_DB_NODE * pNodeFound;    int                 i;    /* you cannot kill the broadcast node */        if (distNodeId == DIST_IF_BROADCAST_ADDR)        return (NULL);        DIST_NODE_DB_LOCK;    /* find the node */    if ((pNodeFound = distNodeFindById (distNodeId)) != NULL)        {        if (DIST_NODE_IS_ALIVE (pNodeFound))            distNodeNumNodesAlive--;        if (pNodeFound->nodeState >= DIST_NODE_STATE_OPERATIONAL)            {#ifdef DIST_DIAGNOSTIC        distLog ("distNodeCrashed: Set node 0x%lx to state CRASHED\n",                distNodeId);#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美自拍偷拍| 欧美日韩国产一级片| 亚洲一区二区三区精品在线| 国产精品色在线观看| 亚洲一区二区在线播放相泽| 亚洲一区二区精品视频| 日韩中文欧美在线| 九九**精品视频免费播放| 国产精品一二三区在线| av男人天堂一区| 欧美日韩一本到| 91精品国产aⅴ一区二区| 欧美成人官网二区| 欧美高清一级片在线观看| 亚洲一区二区成人在线观看| 日韩精品一二三四| 99热这里都是精品| 国产亚洲欧美色| 亚洲综合色区另类av| 狠狠狠色丁香婷婷综合激情| 欧美色图激情小说| 亚洲一区在线免费观看| 成人18视频在线播放| 国产精品电影一区二区| 久久97超碰色| 欧美激情综合在线| 国产盗摄精品一区二区三区在线| 欧美精品一区二区三区一线天视频| 日韩精品一区二区三区四区| 性久久久久久久久久久久| eeuss影院一区二区三区| 久久久久久久久久久久电影 | 亚洲影视资源网| 色综合色狠狠综合色| 久久久www成人免费毛片麻豆| 日韩精彩视频在线观看| 欧美猛男gaygay网站| 日本不卡1234视频| 久久伊人中文字幕| 国产成都精品91一区二区三| 久久久三级国产网站| 国产精品夜夜爽| 亚洲三级在线免费观看| 欧美精品在线视频| 乱一区二区av| 欧美国产在线观看| 欧美主播一区二区三区| 精品亚洲免费视频| 国产精品免费久久久久| 日本一区二区三区四区在线视频 | 亚洲精品网站在线观看| 日韩一区二区在线播放| 成人性生交大合| 亚洲一区二区在线视频| 欧美sm美女调教| 色综合色综合色综合 | 91精品国产欧美日韩| 国产成+人+日韩+欧美+亚洲| 无码av中文一区二区三区桃花岛| 久久午夜色播影院免费高清| 91成人看片片| 欧美亚州韩日在线看免费版国语版| 亚洲一区二区三区中文字幕| 宅男噜噜噜66一区二区66| 亚洲一区二区黄色| 国产精品理论片| 91 com成人网| 一本色道久久综合精品竹菊| 国内成人免费视频| 香蕉影视欧美成人| 久久久影视传媒| 在线观看欧美黄色| 日本久久一区二区三区| 国产成人综合在线| 日本vs亚洲vs韩国一区三区| 亚洲女同一区二区| 国产精品初高中害羞小美女文| 久久中文字幕电影| 337p亚洲精品色噜噜| 成人美女在线观看| 国产盗摄女厕一区二区三区| 欧美aaaaa成人免费观看视频| 亚洲精品一卡二卡| 国产精品天干天干在观线| 欧美r级电影在线观看| 日本韩国欧美国产| 欧美一级专区免费大片| 日韩视频一区二区在线观看| 日韩一级欧美一级| 精品91自产拍在线观看一区| 久久久青草青青国产亚洲免观| 久久综合资源网| 国产午夜精品久久久久久免费视 | 免费的成人av| 国产精品一区在线| 成人午夜电影久久影院| 99国产精品久久久| 在线视频欧美区| 日韩精品在线网站| 久久综合给合久久狠狠狠97色69| 日韩一区二区三区免费看| 久久综合色8888| 亚洲激情图片小说视频| 国产一区二区视频在线| 视频一区在线播放| 精品亚洲成a人在线观看 | 欧美日韩一本到| 亚洲精品一线二线三线| 欧美大片日本大片免费观看| 成人欧美一区二区三区| 久久国产欧美日韩精品| 91蜜桃传媒精品久久久一区二区| 日韩精品一区二区三区视频在线观看| 欧美国产一区在线| 国产原创一区二区| 欧美日韩亚洲综合在线| 综合激情成人伊人| 国产不卡免费视频| 欧美老年两性高潮| 亚洲bdsm女犯bdsm网站| 欧美性xxxxxxxx| 成人欧美一区二区三区1314| 国产精品一级黄| 日韩欧美精品在线视频| 麻豆精品久久精品色综合| 欧美精品在线观看一区二区| 亚洲视频小说图片| eeuss鲁片一区二区三区在线观看| 欧美电视剧在线观看完整版| 人人超碰91尤物精品国产| 在线影视一区二区三区| 亚洲精品欧美专区| 99久久精品国产一区| 国产精品成人一区二区艾草 | 色综合一个色综合亚洲| 亚洲一级二级在线| 91精品国产欧美日韩| 免费一级片91| 2023国产精品| 99国产精品国产精品久久| 中文字幕视频一区二区三区久| av在线不卡网| 亚洲电影在线播放| 亚洲精品视频在线观看免费 | 欧美一卡二卡在线| 国产电影精品久久禁18| 亚洲欧美在线aaa| 91.com在线观看| 国产成人午夜精品5599| 日韩久久一区二区| 精品久久久久久久久久久久久久久| 久久不见久久见免费视频7| 91精品国产欧美一区二区18| 成人丝袜18视频在线观看| 亚洲天堂网中文字| 欧美电影免费观看高清完整版| www.亚洲人| 国内精品免费**视频| 精品福利av导航| 91精品国产综合久久久蜜臀图片| 91高清视频免费看| 亚洲成人一区在线| 国产蜜臀av在线一区二区三区| 99在线精品免费| 久久精品99久久久| 一区二区国产视频| 国产日韩欧美亚洲| 久久综合九色综合97婷婷女人| 国产a视频精品免费观看| 免费观看日韩av| 五月天丁香久久| 一区二区三区四区亚洲| 国产精品第四页| 亚洲综合视频网| 久久久精品免费网站| 午夜不卡在线视频| 亚洲精品写真福利| 日韩久久一区二区| 亚洲精品老司机| ...xxx性欧美| ...中文天堂在线一区| 亚洲一级二级在线| 亚洲gay无套男同| 日韩在线a电影| 日韩av不卡一区二区| 欧美日韩大陆一区二区| 91精品久久久久久蜜臀| 337p亚洲精品色噜噜狠狠| 日韩亚洲欧美在线| 国产欧美久久久精品影院| 国产精品久久久久久妇女6080 | 色88888久久久久久影院野外| 成人久久视频在线观看| 狠狠色丁香久久婷婷综| 色激情天天射综合网| 91原创在线视频| 欧洲精品一区二区| 日韩欧美国产午夜精品| 国产精品第四页| 国产一区久久久|