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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? distgaplib.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/* distGapLib.c - distributed group agreement protocol library *//* Copyright 1999 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01i,24may99,drm  added vxfusion prefix to VxFusion related includes01h,11feb99,drm  fixed endian bugs in GAP protocol - added htons() / ntohs()01g,11sep98,drm  changed #include "distStatLib.h" to "private/distLibP.h"01f,20may98,drm  removed local variable distNodeLclState which was no longer                 being used.01e,13may98,ur   review of some comments01d,15apr98,ur   replaced misleading comments01c,13mar98,ur   fixed crash detection01b,07jan98,ur   fixed "group id already in use"01a,15jul97,ur   written*//*DESCRIPTIONThis library contains the "group agreement protocol" (GAP).*/#include "vxWorks.h"#if defined (DIST_GAP_REPORT) || defined (DIST_DIAGNOSTIC)#include "stdio.h"#endif#include "stdlib.h"#include "string.h"#include "sllLib.h"#include "dllLib.h"#include "msgQLib.h"#include "taskLib.h"#include "netinet/in.h"#include "private/semLibP.h"#include "vxfusion/msgQDistGrpLib.h"#include "vxfusion/distIfLib.h"#include "vxfusion/private/distLibP.h"#include "vxfusion/private/distNameLibP.h"#include "vxfusion/private/msgQDistGrpLibP.h"#include "vxfusion/private/distNetLibP.h"#include "vxfusion/private/distNodeLibP.h"LOCAL DL_LIST			gapInProgress;LOCAL SEMAPHORE			distGapSemaphore;/* local prototypes */LOCAL void			distGapCatchCrashed (DIST_NODE_ID nodeId);LOCAL void			distGapPh1Done (DIST_GRP_DB_NODE *pDistGrp);LOCAL STATUS		distGapTry (DIST_NODE_ID distNodeId,						DIST_GRP_DB_NODE *pDbNode);LOCAL BOOL			distGapOutstandConc (DIST_NODE_DB_NODE *pDistNodeDbNode,						SL_LIST *pOutstand);LOCAL BOOL			distGapOutstandOk (DIST_GAP_NODE *pDistGapNode,						DIST_NODE_ID distNodeIdOk);LOCAL void			distGapOutstandDel (DIST_GAP_NODE *pDistGapNode,						DIST_GAP_RESPONSE *pDistGapResponse,						DIST_GAP_RESPONSE *pDistGapResponsePrev);LOCAL DIST_STATUS	distGapInput (DIST_NODE_ID nodeIdSrc,						DIST_TBUF_HDR *pTBufHdr);#ifdef DIST_GAP_TASKLOCAL void			distGapTimerTask (void);LOCAL void			distGapTimer (void);#endif/********************************************************************************* distGapLibInit - ** NOMANUAL*/STATUS distGapLibInit()	{#ifdef DIST_GAP_TASK	int tid;#endif	dllInit (&gapInProgress);#ifdef DIST_GAP_TASK	tid = taskSpawn ("tDistGAP",			DIST_GAP_MGR_PRIO,			VX_SUPERVISOR_MODE | VX_UNBREAKABLE,			DIST_GAP_MGR_STACK_SZ,			(FUNCPTR) distGapTimerTask,			0, 0, 0, 0, 0, 0, 0, 0, 0, 0);				if (tid == ERROR)		return (ERROR);#endif	distCtl (DIST_CTL_CRASHED_HOOK, (int) distGapCatchCrashed);	/*	 * Add GAP input function to table of services.	 */	return (distNetServAdd (DIST_PKT_TYPE_GAP, distGapInput,			DIST_GAP_SERV_NAME, DIST_GAP_SERV_NET_PRIO,			DIST_GAP_SERV_TASK_PRIO, DIST_GAP_SERV_TASK_STACK_SZ));	}/********************************************************************************* distGapCatchCrashed - get notified by a node crash** NOMANUAL*/LOCAL void distGapCatchCrashed	(	DIST_NODE_ID crashedId	)	{	DIST_GRP_DB_NODE	*pGrpDone;	DIST_GAP_NODE		*pGapNode;	BOOL				more;#ifdef DIST_GAP_REPORT	printf ("distGapCatchCrashed: node %ld crashed\n", crashedId);#endif	pGapNode = (DIST_GAP_NODE *) DLL_FIRST (&gapInProgress);	while (pGapNode != NULL)		{		msgQDistGrpDbLock();		pGrpDone = pGapNode->pGapGrp;		distGapLock();		more = distGapOutstandOk (pGapNode, crashedId);		distGapUnlock();		pGapNode = (DIST_GAP_NODE *) DLL_NEXT (pGapNode);		if (more == FALSE)	/* this was the last node we waited for */			{			msgQDistGrpLclSetState (pGrpDone, DIST_GRP_STATE_GLOBAL);			msgQDistGrpLclSetCreator (pGrpDone, distNodeLocalGetId());			msgQDistGrpDbUnlock();			distGapPh1Done (pGrpDone);			}		else			msgQDistGrpDbUnlock();		}	}/********************************************************************************* distGapOutstandLink - link all operational nodes to GAP structure** NOMANUAL*/void distGapOutstandLink	(	DIST_GAP_NODE	*distGapNode	)	{	sllInit (&distGapNode->gapOutstand);	distNodeEach (distGapOutstandConc, (int) &distGapNode->gapOutstand);	}/********************************************************************************* distGapOutstandConc - called by distGapOutstandLink()** NOMANUAL*/LOCAL BOOL distGapOutstandConc	(	DIST_NODE_DB_NODE	*pDistNodeDbNode,	SL_LIST				*pOutstand	)	{	DIST_GAP_RESPONSE	*pDistGapResp;	if (pDistNodeDbNode->nodeState == DIST_NODE_STATE_OPERATIONAL &&		pDistNodeDbNode->nodeId != DIST_IF_BROADCAST_ADDR)		{		pDistGapResp =				(DIST_GAP_RESPONSE *) malloc (sizeof (DIST_GAP_RESPONSE));		if (pDistGapResp == NULL)			return (ERROR);		pDistGapResp->pGapResponseNode = pDistNodeDbNode;		sllPutAtHead (pOutstand, (SL_NODE *) pDistGapResp);		}	return (TRUE);	/* continue */	}/********************************************************************************* distGapOutstandUnlink - Free all nodes linked to the GAP structure** NOMANUAL*/void distGapOutstandUnlink	(	DIST_GAP_NODE	*distGapNode	)	{	DIST_GAP_RESPONSE	*pDistGapResponse;	DIST_GAP_RESPONSE	*pDistGapResponsePrev = NULL;	if (distGapNode == NULL)		return;	pDistGapResponse = (DIST_GAP_RESPONSE *)			SLL_FIRST (&distGapNode->gapOutstand);	while (pDistGapResponse != NULL)		{		sllRemove (&distGapNode->gapOutstand, (SL_NODE *) pDistGapResponse,				(SL_NODE *) pDistGapResponsePrev);		pDistGapResponsePrev = pDistGapResponse;		pDistGapResponse = (DIST_GAP_RESPONSE *) SLL_NEXT (pDistGapResponse);		free (pDistGapResponsePrev);		}	}/********************************************************************************* distGapOutstandOk - Delete a single node from the GAP structure's node list** RETURNS: TRUE if there are more outstanding responses, or FALSE if the* job is done.** NOMANUAL*/LOCAL BOOL distGapOutstandOk	(	DIST_GAP_NODE	*pDistGapNode,	DIST_NODE_ID	distNodeIdOk	)	{	DIST_GAP_RESPONSE	*pDistGapResp;	DIST_GAP_RESPONSE	*pDistGapRespPrev;	pDistGapResp = (DIST_GAP_RESPONSE *)			SLL_FIRST (&pDistGapNode->gapOutstand);	pDistGapRespPrev = NULL;	while (pDistGapResp != NULL &&		   pDistGapResp->pGapResponseNode->nodeId != distNodeIdOk)		{		pDistGapRespPrev = pDistGapResp;		pDistGapResp = (DIST_GAP_RESPONSE *) SLL_NEXT (pDistGapResp);		}	if (pDistGapResp != NULL)		{		distGapOutstandDel (pDistGapNode, pDistGapResp, pDistGapRespPrev);		if (SLL_FIRST (&pDistGapNode->gapOutstand) == NULL)			return (FALSE);		}	return (TRUE);	}/********************************************************************************* distGapOutstandDel - Delete a single node ** NOMANUAL*/LOCAL void distGapOutstandDel	(	DIST_GAP_NODE		*pDistGapNode,	DIST_GAP_RESPONSE	*pDistGapResponse,	DIST_GAP_RESPONSE	*pDistGapResponsePrev	)	{	sllRemove ((SL_LIST *) &pDistGapNode->gapOutstand,			(SL_NODE *) pDistGapResponse, (SL_NODE *) pDistGapResponsePrev);	free (pDistGapResponse);#ifdef DIST_GAP_REPORT	{	SL_NODE	*pNode = SLL_FIRST (&pDistGapNode->gapOutstand);	int		i;	for (i=0; pNode; i++)		pNode = SLL_NEXT (pNode);	printf ("distGapOutstandDel: %d nodes outstanding\n", i);	}#endif	}/********************************************************************************* distGapPh1Done - phase 1 is done** NOMANUAL*/LOCAL void distGapPh1Done	(	DIST_GRP_DB_NODE	*pDistGrp	)	{	/*	 * List of outstanding responses is empty now. We are done.	 * Send SET telegram and wakeup sleeping task.	 */	DIST_PKT_GAP_SET	distPktGapSet;#ifdef DIST_GAP_REPORT	printf ("distGapInput/OK: GAP phase 1 done.\n");#endif	/*	 * Build SET telegram and broadcast it.	 */	distPktGapSet.setHdr.pktType = DIST_PKT_TYPE_GAP;	distPktGapSet.setHdr.pktSubType = DIST_PKT_TYPE_GAP_SET;	distPktGapSet.setId = htons (pDistGrp->grpDbId);	strcpy ((char *) &distPktGapSet.setName,			(char *) &pDistGrp->grpDbName);#ifdef DIST_GAP_REPORT	printf ("distGapInput/OK: GAP phase 2 -- broadcast SET `%s'/%d.\n",			distPktGapSet.setName, distPktGapSet.setId);#endif	distNetSend (DIST_IF_BROADCAST_ADDR, (DIST_PKT *) &distPktGapSet,			sizeof (distPktGapSet), WAIT_FOREVER, DIST_GAP_PRIO);	/*	 * Wakeup initiator.	 */	semGive (&pDistGrp->pGrpDbGapNode->gapWaitFor);	}/********************************************************************************* distGapNodeInit - Initialize a GAP node** NOMANUAL*/void distGapNodeInit	(	DIST_GAP_NODE		*pDistGapNode,	DIST_GRP_DB_NODE	*pDistGrpDbNode,	BOOL				link	)	{	if (link)		distGapOutstandLink(pDistGapNode);	semBInit (&(pDistGapNode->gapWaitFor), SEM_Q_FIFO, SEM_EMPTY);	pDistGapNode->pGapGrp		= pDistGrpDbNode;	pDistGapNode->gapTimeout	= DIST_GAP_TRY_TIMO;	pDistGapNode->gapRetries	= 1;	distGapLock();	dllInsert (&gapInProgress, NULL, &(pDistGapNode->gapLink));	distGapUnlock();	}/********************************************************************************* distGapNodeDelete - Delete a GAP node** NOMANUAL*/void distGapNodeDelete	(	DIST_GAP_NODE	*pDistGapNode	)	{	distGapLock();	dllRemove (&gapInProgress, (DL_NODE *) &(pDistGapNode->gapLink));	distGapUnlock();	}/********************************************************************************* distGapStart - Start GAP (group agreement protocol)** Do a TRY in order to create a new group.** NOMANUAL*/DIST_MSG_Q_GRP_ID distGapStart	(	DIST_GRP_DB_NODE	*pDistGrpDbNode	)	{	DIST_GAP_NODE		distGapNode;	DIST_MSG_Q_GRP_ID	uniqGrpId;	if (distNodeGetNumNodes(DIST_NODE_NUM_NODES_ALIVE) == 1)		{		/* we are alone */		msgQDistGrpLclSetState (pDistGrpDbNode, DIST_GRP_STATE_GLOBAL);		msgQDistGrpLclSetCreator (pDistGrpDbNode, distNodeLocalGetId());		return (pDistGrpDbNode->grpDbId);		}	/*	 * Init GAP Node and link it to the group database node and	 * the list of active GAPs.	 * GAP initialization includes the linking of all nodes,	 * currently known in the system. When a response comes in,	 * the linked list is updated (the node is removed from the	 * list).	 */	distGapNodeInit(&distGapNode, pDistGrpDbNode, TRUE);	pDistGrpDbNode->pGrpDbGapNode = &distGapNode;	/*	 * Send TRY.	 */	distGapTry (DIST_IF_BROADCAST_ADDR, pDistGrpDbNode);	/*	 * Wait on GAP Node.	 */	semTake (&distGapNode.gapWaitFor, WAIT_FOREVER);	/*	 * Cleanup	 */	if (pDistGrpDbNode->pGrpDbGapNode)		{		DIST_GAP_NODE	*pGapNode = pDistGrpDbNode->pGrpDbGapNode;		pDistGrpDbNode->pGrpDbGapNode = NULL;		distGapNodeDelete (pGapNode);		}#ifdef DIST_DIAGNOSTIC	if (pDistGrpDbNode->grpDbState != DIST_GRP_STATE_GLOBAL)		distLog ("distGapStart: group has no global state\n");#endif	/*	 * Ask for group id.	 */	msgQDistGrpDbLock();	uniqGrpId = msgQDistGrpLclGetId (pDistGrpDbNode);	msgQDistGrpDbUnlock();	return (uniqGrpId);	}/********************************************************************************* distGapTry - Send a TRY, for a specified group** NOMANUAL*/LOCAL STATUS distGapTry	(	DIST_NODE_ID		distNodeId,		/* node address */	DIST_GRP_DB_NODE	*pDistGrpDbNode	/* group to try */	)	{	DIST_PKT_GAP_TRY	distPktGapTry;	STATUS				status;	/*	 * Build TRY telegram and send it.	 */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美亚洲国产精品字幕久久久 | 黑人巨大精品欧美黑白配亚洲| 亚洲美女一区二区三区| 国产精品三级在线观看| 中文字幕av一区二区三区免费看| 久久久久久久一区| 久久久不卡影院| 中文av一区二区| 欧美国产乱子伦| 国产精品视频麻豆| 亚洲天堂2016| 一区二区三区欧美在线观看| 亚洲婷婷在线视频| 亚洲一区二区3| 亚洲午夜久久久久久久久久久| 午夜精品久久久久影视| 日韩不卡免费视频| 久久超碰97人人做人人爱| 国产在线视频一区二区三区| 国产盗摄视频一区二区三区| 成人av在线播放网址| 91麻豆.com| 欧美色精品在线视频| 91麻豆精品国产综合久久久久久 | 欧美精品一区二区三区蜜桃视频 | 亚洲欧洲精品一区二区三区不卡 | 91在线观看美女| 在线免费观看日韩欧美| 91精品欧美综合在线观看最新| 精品国产乱码久久久久久久| 欧美激情一区二区三区四区| 亚洲精品视频观看| 日韩国产欧美一区二区三区| 国产毛片一区二区| 色综合网站在线| 欧美一区日本一区韩国一区| 久久久www成人免费无遮挡大片| 国产精品的网站| 水蜜桃久久夜色精品一区的特点 | 欧美一区二区福利在线| 国产日韩欧美综合一区| 亚洲精品ww久久久久久p站| 秋霞电影网一区二区| 国产成人aaaa| 欧美区在线观看| 国产嫩草影院久久久久| 亚洲国产日韩在线一区模特| 国模无码大尺度一区二区三区| 色综合久久88色综合天天6| 日韩一区二区三区视频| 亚洲天堂成人在线观看| 精品中文字幕一区二区小辣椒| 97se亚洲国产综合在线| 91精品国产91综合久久蜜臀| 中文字幕一区在线| 久草热8精品视频在线观看| 北岛玲一区二区三区四区| 日韩一区二区麻豆国产| 亚洲免费成人av| 国产精品亚洲人在线观看| 在线视频一区二区三| 久久精品亚洲国产奇米99| 午夜久久福利影院| 91亚洲午夜精品久久久久久| 久久综合成人精品亚洲另类欧美| 亚洲一二三四区| 成人免费视频网站在线观看| 欧美一区二区三区四区五区| 亚洲天堂网中文字| 国产91高潮流白浆在线麻豆| 日韩欧美国产一二三区| 亚洲黄色小说网站| 成人va在线观看| xf在线a精品一区二区视频网站| 亚洲国产wwwccc36天堂| 91在线观看下载| 国产欧美一区二区精品忘忧草| 免费在线观看一区| 欧美日韩亚洲丝袜制服| 亚洲男人天堂av网| 成人app网站| 久久蜜桃一区二区| 久久精品国产一区二区| 欧美另类久久久品| 亚洲国产cao| 欧洲精品视频在线观看| 亚洲欧美日韩综合aⅴ视频| 大桥未久av一区二区三区中文| 精品国产免费一区二区三区四区 | 亚洲大片免费看| 91老司机福利 在线| 欧美日本视频在线| 91精品久久久久久久91蜜桃| 成人免费看视频| 日韩欧美国产三级| 日韩不卡免费视频| 欧美疯狂性受xxxxx喷水图片| 亚洲美女免费在线| 91片在线免费观看| 日韩毛片精品高清免费| 波多野结衣亚洲一区| 国产精品美女一区二区三区| 粉嫩高潮美女一区二区三区| 久久久另类综合| 国产自产高清不卡| 久久久www成人免费毛片麻豆| 国产一区二三区| 国产欧美一区二区三区在线看蜜臀 | 成人黄色电影在线| 欧美国产精品中文字幕| 成人美女视频在线看| 国产精品视频免费| 91国偷自产一区二区三区成为亚洲经典| 1024亚洲合集| 欧美亚洲综合网| 亚洲www啪成人一区二区麻豆| 欧美日本精品一区二区三区| 日本视频在线一区| 26uuu亚洲| 成人午夜激情片| 尤物视频一区二区| 欧美精品777| 国产一区二区美女诱惑| 欧美国产欧美亚州国产日韩mv天天看完整 | 亚洲国产你懂的| 欧美精品在线视频| 国产真实乱子伦精品视频| 国产精品免费观看视频| 欧美色电影在线| 老色鬼精品视频在线观看播放| 国产欧美日韩视频一区二区| 91美女片黄在线观看| 水野朝阳av一区二区三区| 久久久久久久久伊人| 成人avav在线| 日韩—二三区免费观看av| 久久亚洲综合av| 91女厕偷拍女厕偷拍高清| 午夜精品久久久久久不卡8050| 精品三级在线看| 91在线小视频| 欧美aⅴ一区二区三区视频| 欧美高清在线一区| 欧美四级电影在线观看| 精品午夜久久福利影院| 亚洲人成精品久久久久| 精品日韩一区二区| k8久久久一区二区三区| 日韩精品三区四区| 国产精品乱码一区二三区小蝌蚪| 欧美日韩和欧美的一区二区| 国产精品自在在线| 亚洲国产精品影院| 欧美激情综合在线| 91精品国产乱码久久蜜臀| heyzo一本久久综合| 美腿丝袜亚洲色图| 亚洲人精品午夜| 精品99999| 欧美日韩午夜在线视频| 成人小视频免费在线观看| 日韩精品电影在线| 一区在线播放视频| 欧美精品一区二区精品网| 91成人在线免费观看| 国产成a人亚洲| 免费观看日韩电影| 亚洲综合网站在线观看| 国产日韩欧美精品电影三级在线| 欧美精品日韩一区| 色婷婷久久一区二区三区麻豆| 国产一区高清在线| 日韩av一二三| 亚洲国产精品一区二区www在线 | 亚洲第四色夜色| 国产精品久久久久三级| 久久综合色一综合色88| 欧美精品777| 欧美日韩国产区一| 在线中文字幕不卡| a亚洲天堂av| 成人美女视频在线看| 国产成人亚洲精品青草天美| 蜜桃av噜噜一区| 首页综合国产亚洲丝袜| 夜夜嗨av一区二区三区中文字幕 | 欧美国产精品一区二区| 337p粉嫩大胆噜噜噜噜噜91av| 制服丝袜日韩国产| 欧美另类videos死尸| 欧美亚洲国产一区在线观看网站| 99re这里只有精品首页| 国产69精品久久777的优势| 国产呦萝稀缺另类资源| 水蜜桃久久夜色精品一区的特点| 亚洲国产精品人人做人人爽| 亚洲最快最全在线视频| 一区二区三区在线视频播放| 亚洲码国产岛国毛片在线| 中文字幕欧美一区|