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

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

?? msgqdistgrplib.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
/* 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.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人一区二区| 成人av午夜影院| 欧美色图在线观看| 亚洲国产日产av| 欧美性videosxxxxx| 亚洲va欧美va天堂v国产综合| 风间由美一区二区三区在线观看 | 成人不卡免费av| 国产丝袜在线精品| 风流少妇一区二区| 亚洲色图在线看| 91精品福利在线| 午夜激情久久久| 日韩三级中文字幕| 国产一区二区精品久久99| 久久精品人人做人人综合| av不卡在线播放| 亚洲一二三区在线观看| 欧美日韩三级在线| 美女网站在线免费欧美精品| 精品国产一区二区三区久久久蜜月 | 欧美亚洲国产一区二区三区va| 亚洲一区二区在线免费看| 欧美日韩国产综合一区二区 | 狠狠色狠狠色综合日日91app| 欧美一级理论片| 久88久久88久久久| 日本一区免费视频| 在线看国产一区| 偷拍自拍另类欧美| 精品国产99国产精品| 成人性生交大片免费| 亚洲综合小说图片| 精品国产91乱码一区二区三区| 丰满少妇久久久久久久| 一区免费观看视频| 欧美男生操女生| 国产精品99久久久久久宅男| 亚洲欧洲99久久| 欧美理论片在线| 国产精品中文有码| 亚洲九九爱视频| 日韩三级视频在线看| 成人污污视频在线观看| 亚洲第一搞黄网站| 久久婷婷一区二区三区| 91久久精品午夜一区二区| 亚洲午夜三级在线| 国产亚洲精品aa午夜观看| 欧洲中文字幕精品| 国产酒店精品激情| 亚洲成人高清在线| 久久久久九九视频| 欧美性色综合网| 国产高清在线精品| 亚洲成人三级小说| 国产日韩精品久久久| 欧美人成免费网站| 国产一区久久久| 亚洲美女在线国产| 久久久亚洲高清| 欧美日韩一区二区三区高清| 成人影视亚洲图片在线| 日韩av一区二区三区四区| 中文字幕一区二区三区精华液 | 久久先锋资源网| 99久久久久久| 极品少妇xxxx精品少妇偷拍| 一区二区三区免费看视频| 精品99久久久久久| 欧美日韩欧美一区二区| 亚洲一区二区视频在线| 国产色产综合色产在线视频| 日韩午夜激情视频| 欧美日韩国产在线播放网站| 91色porny在线视频| 成人免费看黄yyy456| 国产高清无密码一区二区三区| 另类小说图片综合网| 日韩激情中文字幕| 亚洲6080在线| 亚洲午夜影视影院在线观看| 亚洲老妇xxxxxx| 亚洲欧美日韩成人高清在线一区| 亚洲国产精品精华液ab| 久久嫩草精品久久久精品| 欧美不卡在线视频| 欧美一区二区视频观看视频| 欧美日本视频在线| 欧美日本一道本在线视频| 欧美偷拍一区二区| 91电影在线观看| 91麻豆精东视频| 色呦呦日韩精品| 一本色道久久综合精品竹菊| 99在线热播精品免费| 成人97人人超碰人人99| 成人激情图片网| 99视频热这里只有精品免费| 成人免费观看av| 成人高清在线视频| 北条麻妃一区二区三区| 99国产欧美久久久精品| 91视频国产观看| 91久久精品一区二区二区| 欧美在线观看一区二区| 欧美亚洲高清一区二区三区不卡| 欧日韩精品视频| 欧美日韩一区二区三区不卡| 9191久久久久久久久久久| 日韩午夜av电影| 欧美mv日韩mv国产| 久久久久99精品国产片| 欧美高清在线精品一区| 国产精品少妇自拍| 亚洲同性gay激情无套| 一区二区三区成人在线视频| 亚洲6080在线| 久久www免费人成看片高清| 精品影视av免费| 国产二区国产一区在线观看| 国产精品一卡二卡| 波多野结衣91| 欧美视频在线一区二区三区| 制服丝袜中文字幕亚洲| 日韩欧美久久一区| 久久精品人人做| 亚洲欧美自拍偷拍色图| 亚洲国产精品自拍| 美女视频一区二区| 国产91对白在线观看九色| 99久久综合狠狠综合久久| 在线观看免费成人| 日韩一二三区不卡| 国产午夜精品一区二区三区视频| 综合中文字幕亚洲| 亚洲第一久久影院| 精品一区二区在线观看| 成人激情开心网| 欧美网站大全在线观看| 日韩免费视频一区| 中文字幕二三区不卡| 亚洲综合成人在线视频| 麻豆精品一区二区三区| 成人av先锋影音| 7777精品伊人久久久大香线蕉的 | 成av人片一区二区| 欧美色涩在线第一页| 精品av久久707| 亚洲精品日日夜夜| 久久国产乱子精品免费女| 成人av电影免费观看| 欧美二区三区的天堂| 久久精品视频在线免费观看| 一区二区三区精品久久久| 久久国产成人午夜av影院| 99热在这里有精品免费| 91精品国产麻豆| 国产精品久久久久一区二区三区| 亚洲午夜久久久久| 国产一区免费电影| 欧美色图一区二区三区| 久久久99精品久久| 一区二区三区四区在线免费观看| 美脚の诱脚舐め脚责91| www.爱久久.com| 91精品国产一区二区三区香蕉| 国产精品全国免费观看高清 | 青娱乐精品视频| 成人性生交大片免费看中文| 欧美精品色一区二区三区| 欧美激情综合五月色丁香| 日本女人一区二区三区| 不卡视频一二三四| 日韩美女天天操| 亚洲影院免费观看| 大胆欧美人体老妇| 日韩美一区二区三区| 亚洲影视在线播放| 国产99久久精品| 91精品欧美一区二区三区综合在| 亚洲视频 欧洲视频| 国产一区二区不卡| 欧美精品一二三四| 亚洲另类在线制服丝袜| 国产91对白在线观看九色| 欧美一二三区在线观看| 一区二区三区美女视频| 成人午夜激情在线| 精品免费国产二区三区| 亚洲午夜日本在线观看| 99精品视频在线观看| 久久久亚洲高清| 蜜桃视频在线一区| 欧美午夜免费电影| 亚洲精品欧美综合四区| 成人免费电影视频| 久久男人中文字幕资源站| 伦理电影国产精品| 欧美日韩国产影片|