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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? msgqdistgrplib.c

?? vxworks操作系統(tǒng)的源代碼 供研究學(xué)習(xí)
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
/* msgQDistGrpLib.c - distributed message queue group library (VxFusion option) *//* Copyright 1999-2002 Wind River Systems, Inc. *//*modification history--------------------01q,23oct01,jws  fix compiler warnings (SPR 71117); fix man pages (SPR 71239)01p,24jul01,r_s  changed code to be ANSI compatible so that it compiles with                 diab. made asm macro changes for diab01o,09jun99,drm  Allowing check for empty groups.01n,09jun99,drm  Adding some htonl() / ntohl()01m,09jun99,drm  Adding code to return S_msgQDistLib_OVERALL_TIMEOUT01l,01jun99,drm  Adding check to make sure that only distributed message                 queues (and not groups) can be added to a group.01k,24may99,drm  added vxfusion prefix to VxFusion related includes01j,23feb99,wlf  doc edits01i,18feb99,wlf  doc cleanup01h,29oct98,drm  documentation modifications01g,09oct98,drm  fixed a bug reported by Oce01f,13may98,ur   cleanup when msgQDistGrpInit() fails                 locking on group send inquiries01e,08may98,ur   removed 8 bit node id restriction01d,08apr98,ur   optional enhancement CHECK_FOR_EMPTY_GROUP--untested01c,20mar98,ur   set errno when database is full01b,01jul97,ur   tested, ok.01a,11jun97,ur   written.*//*DESCRIPTIONThis library provides the grouping facility for distributed message queues.  Single distributed message queues can join one or more groups.  A messagesent to a group is sent to all message queues that are members of thatgroup.  A group, however, is prohibited from sending messages.  Also, it isan error to call msgQDistNumMsgs() with a distributed message queue group ID.Groups are created with symbolic names and identified by a unique ID, MSG_Q_ID, as with normal message queues.If the group is new to the distributed system, the group agreement protocol (GAP) is employed to determine a globally unique identifier.  As part of the protocol's negotiation, all group databases throughout the system are updated.The distributed message queue group library is initialized by callingdistInit().AVAILABILITYThis module is distributed as a component of the unbundled distributedmessage queues option, VxFusion.INCLUDE FILES: msgQDistGrpLib.hSEE ALSO: distLib, msgQDistGrpShow*/#include "vxWorks.h"#if defined (MSG_Q_DIST_GRP_REPORT) || defined (DIST_DIAGNOSTIC)#include "stdio.h"#endif#include "string.h"#include "stdlib.h"#include "taskLib.h"#include "hashLib.h"#include "sllLib.h"#include "errnoLib.h"#include "msgQLib.h"#include "netinet/in.h"#include "vxfusion/msgQDistLib.h"#include "vxfusion/msgQDistGrpLib.h"#include "vxfusion/distIfLib.h"#include "vxfusion/distStatLib.h"#include "vxfusion/private/msgQDistGrpLibP.h"#include "vxfusion/private/distNetLibP.h"#include "vxfusion/private/distNodeLibP.h"#include "vxfusion/private/distObjLibP.h"#include "vxfusion/private/distLibP.h"/* defines */#define UNUSED_ARG(x)  if(sizeof(x)) {} /* to suppress compiler warnings */#define KEY_ARG_STR        13#define KEY_CMP_ARG_STR    0       /* not used */#define KEY_ARG_ID        65537#define KEY_CMP_ARG_ID    0        /* not used *//* global data */SEMAPHORE                    distGrpDbSemaphore;DIST_MSG_Q_GRP_ID            distGrpIdNext = 0;/* local data */LOCAL HASH_ID                distGrpDbNmId = NULL;LOCAL DIST_GRP_HASH_NODE *   distGrpDbNm = NULL;LOCAL HASH_ID                distGrpDbIdId = NULL;LOCAL DIST_GRP_HASH_NODE *   distGrpDbId = NULL;LOCAL DIST_GRP_DB_NODE *     distGrpDb = NULL;LOCAL SL_LIST                msgQDistGrpFreeList;LOCAL BOOL                   msgQDistGrpLibInstalled = FALSE;/* local prototypes */LOCAL BOOL          msgQDistGrpHCmpStr (DIST_GRP_HASH_NODE *pMatchNode,                                        DIST_GRP_HASH_NODE *pHNode,                                        int keyArg);LOCAL INT32         msgQDistGrpHFuncStr (int elements,                                         DIST_GRP_HASH_NODE *pHNode,                                         int keyArg);LOCAL BOOL          msgQDistGrpHCmpId (DIST_GRP_HASH_NODE *pMatchNode,                                       DIST_GRP_HASH_NODE *pHNode,                                       int keyArg);LOCAL INT32         msgQDistGrpHFuncId (int elements,                                        DIST_GRP_HASH_NODE *pHNode,                                        int keyArg);LOCAL DIST_STATUS    msgQDistGdbInput (DIST_NODE_ID nodeIdSrc,                                       DIST_TBUF_HDR *pTBufHdr);LOCAL DIST_STATUS    msgQDistGrpInput (DIST_NODE_ID nodeIdSrc,                                       DIST_TBUF_HDR *pTBufHdr);LOCAL STATUS         msgQDistGrpLclSend (DIST_MSG_Q_GRP_SEND_INQ *pInq,                                         DIST_MSG_Q_GRP_ID distMsgQGrpId,                                         char *buffer,                                         UINT nBytes, int timeout,                                         int priority);LOCAL void           msgQDistGrpLclSendCanWait (DIST_INQ_ID inqId,                                                MSG_Q_ID msgQId,                                                char *buffer, UINT nBytes,                                                int timeout, int priority);LOCAL STATUS         msgQDistGrpAgent (DIST_NODE_ID nodeIdSender,                                       DIST_INQ_ID inqIdSender,                                       DIST_MSG_Q_GRP_ID distMsgQGrpId,                                       char *buffer,                                       UINT nBytes, int timeout,                                       int priority);LOCAL STATUS         msgQDistGrpSendStatus (DIST_NODE_ID nodeIdDest,                                            DIST_INQ_ID inqId,                                            DIST_MSG_Q_STATUS msgQStatus);LOCAL BOOL           msgQDistGrpBurstOne (DIST_GRP_HASH_NODE *pNode,                                          DIST_GRP_BURST *pBurst);/***************************************************************************** msgQDistGrpLibInit - initialize the distributed message queue group package (VxFusion option)** This routine currently does nothing.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: N/A** NOMANUAL*/void msgQDistGrpLibInit (void)    {    }/***************************************************************************** msgQDistGrpInit - initialize the group database (VxFusion option)** This routine initializes the group database.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: OK, if successful; ERROR, if unsucessful.** NOMANUAL*/STATUS msgQDistGrpInit    (    int               sizeLog2   /* init 2^^sizeLog2 entries */    )    {    DIST_GRP_DB_NODE * pDbNode;    int                hashTblSizeLog2;    int                grpHNBytes;    int                grpDbNBytes;    int                grpDbSize;    int                ix;    STATUS             grpDbServAddStatus;    STATUS             msgQGrpServAddStatus;    if (sizeLog2 < 1)        return (ERROR);    if (msgQDistGrpLibInstalled == TRUE)        return (OK);    if (hashLibInit () == ERROR)        return (ERROR); /* hashLibInit() failed */    if (distInqInit (DIST_INQ_HASH_TBL_SZ_LOG2) == ERROR)        return (ERROR);    hashTblSizeLog2 = sizeLog2 - 1;    distGrpDbNmId = hashTblCreate (hashTblSizeLog2, msgQDistGrpHCmpStr,                                   msgQDistGrpHFuncStr, KEY_ARG_STR);    distGrpDbIdId = hashTblCreate (hashTblSizeLog2, msgQDistGrpHCmpId,                                   msgQDistGrpHFuncId, KEY_ARG_ID);    if (distGrpDbNmId && distGrpDbIdId)        {        grpDbSize = 1 << sizeLog2;        grpHNBytes = grpDbSize * sizeof (DIST_GRP_HASH_NODE);        grpDbNBytes = grpDbSize * sizeof (DIST_GRP_DB_NODE);        distGrpDbNm = (DIST_GRP_HASH_NODE *) malloc (grpHNBytes);        distGrpDbId = (DIST_GRP_HASH_NODE *) malloc (grpHNBytes);        distGrpDb = (DIST_GRP_DB_NODE *) malloc (grpDbNBytes);        if (distGrpDbNm && distGrpDbId && distGrpDb)            {            sllInit (&msgQDistGrpFreeList);            for (ix = 0; ix < grpDbSize; ix++)                {                pDbNode = &distGrpDb[ix];                pDbNode->ixNode = ix;                sllPutAtHead (&msgQDistGrpFreeList, (SL_NODE *) pDbNode);                distGrpDbNm[ix].pDbNode = pDbNode;                distGrpDbId[ix].pDbNode = pDbNode;                }            msgQDistGrpDbLockInit();            /* Add distributed group database service to table of services. */            grpDbServAddStatus = distNetServAdd (                    DIST_PKT_TYPE_DGDB,                    msgQDistGdbInput,                    DIST_DGDB_SERV_NAME,                    DIST_DGDB_SERV_NET_PRIO,                    DIST_DGDB_SERV_TASK_PRIO,                    DIST_DGDB_SERV_TASK_STACK_SZ);            /* Add message group service to table of services. */                        msgQGrpServAddStatus =                distNetServAdd ( DIST_PKT_TYPE_MSG_Q_GRP,                                 msgQDistGrpInput,                                 DIST_MSG_Q_GRP_SERV_NAME,                                 DIST_MSG_Q_GRP_SERV_NET_PRIO,                                 DIST_MSG_Q_GRP_SERV_TASK_PRIO,                                 DIST_MSG_Q_GRP_SERV_TASK_STACK_SZ);            if (grpDbServAddStatus != ERROR && msgQGrpServAddStatus != ERROR)                {                msgQDistGrpLibInstalled = TRUE;                return (OK);                }            }        }        /* cleanup, when error */        if (distGrpDbNmId)    hashTblDelete (distGrpDbNmId);        if (distGrpDbIdId)    hashTblDelete (distGrpDbIdId);        if (distGrpDbNm)      free (distGrpDbNm);        if (distGrpDbId)      free (distGrpDbId);        if (distGrpDb)        free (distGrpDb);        return (ERROR);    }/***************************************************************************** msgQDistGrpAdd - add a distributed message queue to a group (VxFusion option)** This routine adds the queue identified by the argument <msgQId> to a group* with the ASCII name specified by the argument <distGrpName>. ** Multicasting is based on distributed message queue groups.  If the group * does not exist, one is created.  Any number of message queues from different * nodes can be bound to a single group. In addition, a message queue can* be added into any number of groups; msgQDistGrpAdd() must be called for each* group of which the message queue is to be a member.** The <options> parameter is presently unused and must be set to 0.** This routine returns a message queue ID, MSG_Q_ID, that can be used directly * by msgQDistSend() or by the generic msgQSend() routine.  Do not call the* msgQReceive() or msgQNumMsgs() routines or their distributed counterparts,* msgQDistReceive() and msgQDistNumMsgs(), with a group message queue ID.** As with msgQDistCreate(), use distNameAdd() to add the group message * queue ID returned by this routine to the distributed name database so * that the ID can be used by tasks on other nodes.** AVAILABILITY* This routine is distributed as a component of the unbundled distributed* message queues option, VxFusion.** RETURNS: MSG_Q_ID, or NULL if there is an error.** ERRNO:* \is* \i S_msgQDistGrpLib_NAME_TOO_LONG* The name of the group is too long.* \i S_msgQDistGrpLib_INVALID_OPTION* The <options> parameter is invalid.* \i S_msgQDistGrpLib_DATABASE_FULL* The group database is full.* \i S_distLib_OBJ_ID_ERROR* The <msgQId> parameter is not a distributed message queue.* \ie** SEE ALSO: msgQLib, msgQDistLib, distNameLib* * INTERNAL NOTE: Takes <distGrpDbSemaphore>.*/MSG_Q_ID msgQDistGrpAdd    (    char *            distGrpName,  /* new or existing group name           */    MSG_Q_ID          msgQId,       /* message queue to add to the group    */    DIST_GRP_OPT      options       /* group message queue options - UNUSED */    )    {    DIST_GRP_DB_NODE * pDistGrpDbNode;    DIST_MSG_Q_ID      dMsgQId;      /* distributed message queue ID */    DIST_OBJ_NODE * pObjNode;     /* ptr to object containing real ID */     DIST_GAP_NODE   dGapNode;    DIST_GAP_NODE * pDGapNodeTemp;    /*     * Check the parameters:       * - msgQId must be a distributed message queue. It cannot be a     *   a standard message queue or a group.     * - the group name cannot exceed DIST_NAME_MAX_LENGTH     * - options must be 0     *     * If any of the parameters are invalid, set errno and return     * NULL to indicate failure.     */    if (!ID_IS_DISTRIBUTED (msgQId)) /* not a distributed message queue */        {        errnoSet (S_distLib_OBJ_ID_ERROR);        return NULL;        }    else                             /* is distributed msgQ */        {        pObjNode = MSG_Q_ID_TO_DIST_OBJ_NODE (msgQId);        if (!IS_DIST_MSG_Q_OBJ (pObjNode))            {            /* legal object ID, but not a message queue */            errnoSet (S_distLib_OBJ_ID_ERROR);            return NULL;                }               dMsgQId = (DIST_MSG_Q_ID) pObjNode->objNodeId;        if (IS_DIST_MSG_Q_TYPE_GRP(dMsgQId))            {            /* ID refers to a group, not a plain dist. message queue */            errnoSet (S_distLib_OBJ_ID_ERROR);            return NULL;            }        }    if (strlen (distGrpName) > DIST_NAME_MAX_LENGTH)        {        errnoSet (S_msgQDistGrpLib_NAME_TOO_LONG);        return (NULL);    /* name too long */        }    if (options != 0)        {        errnoSet (S_msgQDistGrpLib_INVALID_OPTION);        return (NULL);    /* options parameter currently unused */        }    /* Lock the database and try to find the group. */    msgQDistGrpDbLock();    pDistGrpDbNode = msgQDistGrpLclFindByName (distGrpName);    if (pDistGrpDbNode == NULL)        {#ifdef MSG_Q_DIST_GRP_REPORT        DIST_MSG_Q_GRP_ID    grpId;#endif        /* Group is unknown by now, create it. */#ifdef MSG_Q_DIST_GRP_REPORT        printf ("msgQDistGrpAdd: group is unknown by now--create it\n");#endif        pDistGrpDbNode = msgQDistGrpLclCreate (distGrpName, distGrpIdNext++,                                               DIST_GRP_STATE_LOCAL_TRY);        msgQDistGrpDbUnlock();        if (pDistGrpDbNode == NULL)            {#ifdef DIST_DIAGNOSTIC            distLog ("msgQDistGrpAdd: failed to create new group\n");#endif            errnoSet (S_msgQDistGrpLib_DATABASE_FULL);            return (NULL);            }        /*         * Agree on a global unique identifier for the group and         * add the fist group member.         */#ifdef MSG_Q_DIST_GRP_REPORT        printf ("msgQDistGrpAdd: enter agreement phase, propose 0x%lx\n",                (u_long) msgQDistGrpLclGetId (pDistGrpDbNode));        grpId =#endif            msgQDistGrpAgree (pDistGrpDbNode);#ifdef MSG_Q_DIST_GRP_REPORT        printf ("msgQDistGrpAdd: agreed on 0x%lx\n", (u_long) grpId);#endif        msgQDistGrpLclAddMember (pDistGrpDbNode, msgQId);        }    else        {        /* Group already exists. Check the state. */#ifdef MSG_Q_DIST_GRP_REPORT        printf ("msgQDistGrpAdd: group already exists--add object\n");#endif        while (pDistGrpDbNode->grpDbState < DIST_GRP_STATE_GLOBAL)            {                /*                 * Group already exists, but has a local state. This means,                 * somebody else tries to install the group.                 * We unlock the group database and wait for a go-ahead.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情文学综合丁香| 不卡在线观看av| 国产精品妹子av| 欧美日韩亚洲国产综合| 岛国一区二区三区| 免播放器亚洲一区| 亚洲综合免费观看高清在线观看| 精品日产卡一卡二卡麻豆| 一本到不卡精品视频在线观看 | 一区二区欧美精品| 日韩一区二区在线观看视频| 国产一区二区三区免费播放| 亚洲精品视频自拍| 久久在线观看免费| 欧美色综合天天久久综合精品| 乱一区二区av| 亚洲成人自拍一区| 国产精品乱码人人做人人爱| 欧美一级电影网站| 在线观看不卡视频| 成人免费毛片片v| 免费在线成人网| 一区二区视频在线看| 久久综合九色综合97婷婷| 在线观看一区二区精品视频| 国产精品一区二区在线观看网站| 亚洲第一久久影院| 国产欧美一区二区三区网站| 欧美一区二区视频在线观看2020 | 色美美综合视频| 国产在线一区观看| 午夜精品久久久久久久久久| 国产精品美女久久福利网站| 久久久综合视频| 日韩欧美亚洲国产精品字幕久久久 | 91麻豆国产香蕉久久精品| 国产资源精品在线观看| 日精品一区二区三区| 亚洲欧美福利一区二区| 欧美韩国一区二区| 久久久精品免费网站| 欧美sm极限捆绑bd| 日韩一区二区电影在线| 69av一区二区三区| 欧美午夜不卡在线观看免费| 欧美在线视频日韩| 在线一区二区观看| 欧美最新大片在线看| 91国在线观看| 91蝌蚪porny九色| 9人人澡人人爽人人精品| 国产aⅴ精品一区二区三区色成熟| 奇米亚洲午夜久久精品| 日本在线播放一区二区三区| 日本少妇一区二区| 免费黄网站欧美| 免费在线视频一区| 久久精品久久99精品久久| 免费观看在线综合| 日韩中文字幕91| 日本最新不卡在线| 激情深爱一区二区| 国产成人午夜电影网| 粉嫩av一区二区三区粉嫩| 成人久久18免费网站麻豆| 不卡在线视频中文字幕| 色天天综合久久久久综合片| 欧洲av在线精品| 日韩一区二区视频| 久久久久九九视频| 中文字幕中文在线不卡住| 亚洲色图一区二区三区| 亚洲国产视频在线| 日韩专区在线视频| 激情成人综合网| 成人动漫一区二区| 欧美自拍偷拍午夜视频| 欧美一区二区三区性视频| 2020国产精品| 中文欧美字幕免费| 亚洲国产欧美在线| 久久精品国产一区二区三| 处破女av一区二区| 在线一区二区三区四区| 日韩一区二区电影| 欧美激情综合网| 亚洲一二三级电影| 国产一区二区在线视频| av一二三不卡影片| 欧美日韩高清一区| 久久久99久久| 一区二区三区四区中文字幕| 日本三级亚洲精品| 91色婷婷久久久久合中文| 欧美疯狂做受xxxx富婆| 欧美国产亚洲另类动漫| 一区二区三区在线免费观看| 久久99精品久久久| 91黄色激情网站| 久久夜色精品一区| 一区二区三区成人在线视频| 狠狠色丁香婷婷综合| 色菇凉天天综合网| 精品国产伦一区二区三区观看体验 | 国产一区不卡在线| 在线亚洲+欧美+日本专区| 26uuu精品一区二区| 亚洲精品国产品国语在线app| 麻豆精品视频在线观看| 色播五月激情综合网| 久久天堂av综合合色蜜桃网| 亚洲一区精品在线| 成人午夜视频福利| 欧美一级日韩免费不卡| 亚洲日本va午夜在线影院| 久久国产剧场电影| 91成人国产精品| 欧美国产在线观看| 久久99精品一区二区三区| 欧美在线色视频| 国产精品久久久久影院| 精品影院一区二区久久久| 欧美色网一区二区| 国产精品久久久久久久久快鸭 | 一区二区三区在线视频播放| 国产一区二区三区蝌蚪| 欧美一级欧美一级在线播放| 玉米视频成人免费看| 成人黄色在线视频| 欧美激情综合网| 国产一区二区三区久久悠悠色av| 91精品在线麻豆| 午夜精品久久久久久久99樱桃| 成人福利视频网站| 久久久精品免费网站| 亚洲成人综合视频| 8v天堂国产在线一区二区| 亚洲一区二区综合| 色88888久久久久久影院野外| 久久精品免费在线观看| 黄页视频在线91| 欧美成人乱码一区二区三区| 日韩不卡一二三区| 91精品综合久久久久久| 亚洲成人自拍偷拍| 欧美日韩精品一二三区| 亚洲一区二区三区四区不卡| 91黄视频在线| 亚洲国产欧美在线| 欧美精品久久99| 无吗不卡中文字幕| 欧美福利一区二区| 美女网站色91| 日韩精品专区在线影院观看 | 成人毛片视频在线观看| 欧美国产1区2区| 成人午夜在线视频| 国产精品国产精品国产专区不蜜| www.66久久| 亚洲美女免费视频| 日本高清不卡在线观看| 亚洲一区中文在线| 色美美综合视频| 亚洲综合一区二区三区| 日本高清不卡一区| 亚洲成va人在线观看| 这里是久久伊人| 青青草97国产精品免费观看| 精品久久久久99| 国产精品系列在线播放| 国产精品对白交换视频| 色偷偷88欧美精品久久久| 亚洲在线成人精品| 7777精品伊人久久久大香线蕉的 | 成人欧美一区二区三区| 欧美在线视频你懂得| 日韩电影在线观看网站| 精品欧美一区二区久久| 国产成人综合亚洲91猫咪| 国产精品成人网| 欧美日韩中文字幕一区二区| 免费人成精品欧美精品| 国产欧美一区二区在线观看| 91日韩在线专区| 免费在线成人网| 中文字幕永久在线不卡| 欧美日韩国产一级片| 国产凹凸在线观看一区二区| 亚洲欧美另类久久久精品2019| 欧美日韩国产免费| 国产一区二区三区香蕉| 亚洲精品免费在线观看| 日韩一区二区三区在线| 国产成人一区二区精品非洲| 一区二区三区在线观看欧美| 日韩一区和二区| 99在线视频精品| 日本成人在线电影网| 亚洲欧洲成人自拍| 日韩视频不卡中文|