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

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

?? siglib.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
	if (pSigpend->sigp_info.si_code == SI_QUEUE)	    {	    *(struct sigpend **)pSigpend = _pSigQueueFreeHead;	    _pSigQueueFreeHead = pSigpend;	    }	}    if (pSigTcb->sigt_qhead[sig].sigq_next == &pSigTcb->sigt_qhead[sig])	pSigTcb->sigt_pending &= ~mask;    return (sig);    }/********************************************************************************* sigWindPendKill - add a signal to the set of pending signals** NOTE: YOU MUST BE IN THE KERNEL.*/static void sigWindPendKill    (    WIND_TCB		*pTcb,    struct sigpend	*pSigPend    )    {    int			signo = pSigPend->sigp_info.si_signo;    struct sigtcb	*pSigTcb;    void		(*func)();    unsigned		mask;    /*     * Check to see if the task has the signal structure.  If it does     * not, we pretend the task is ignoring them.     */    if ((pSigTcb = pTcb->pSignalInfo) == NULL)	return;    /*     * If task is waiting for signal, deliver it by waking up the task.     */    if ((pSigTcb->sigt_wait != NULL) &&	(sigismember(&pSigTcb->sigt_wait->sigw_set, signo) == 1) &&	(Q_FIRST(&pSigTcb->sigt_wait->sigw_wait) != NULL))	{	pSigTcb->sigt_wait->sigw_info = pSigPend->sigp_info;#ifdef WV_INSTRUMENTATION        /* windview - level 2 event logging */  	EVT_TASK_1 (EVENT_OBJ_SIGKILL, pTcb); /* log event */#endif	windPendQGet (&pSigTcb->sigt_wait->sigw_wait);	/*	 * Mark task as no longer waiting	 */	pSigTcb->sigt_wait = NULL;	return;	}    /*     * The default action for signals is to ignore them, in posix     * it is to kill the process.     */    func = pSigTcb->sigt_vec[signo].sa_handler;    if (func == SIG_DFL)	return;			/* should maybe kill the task */    /*     * Check to see if signal should be ignored.     */    if (func == SIG_IGN)	return;    /*     * Check to see if signal should be queued up because they are being     * blocked.     */    mask = sigmask(signo);    if (pSigTcb->sigt_blocked & mask)	{	/*	 * kill signals just get a bit to say a signal has come	 */	if (pSigPend->sigp_info.si_code == SI_KILL)	    {	    pSigTcb->sigt_kilsigs |= mask;	    pSigTcb->sigt_pending |= mask;	    }	/*	 * if the signal is all ready queued, mark it as overrun	 */	else if (pSigPend->sigp_q.sigq_next != NULL)	    pSigPend->sigp_active_overruns++;	/*	 * must be a signal to queue	 */	else	    {	    struct sigq *head = &pSigTcb->sigt_qhead[signo];	    /*	     * alloc buffer for sigqueue	     */	    if (pSigPend->sigp_info.si_code == SI_QUEUE)		{		struct sigpend *pTmp = _pSigQueueFreeHead;		_pSigQueueFreeHead = *(struct sigpend **)_pSigQueueFreeHead;		*pTmp = *pSigPend;		pSigPend = pTmp;		}	    pSigPend->sigp_q.sigq_prev = head->sigq_prev;	    pSigPend->sigp_q.sigq_next = head;	    pSigPend->sigp_q.sigq_prev->sigq_next = &pSigPend->sigp_q;	    head->sigq_prev = &pSigPend->sigp_q;	    pSigTcb->sigt_pending |= mask;	    pSigPend->sigp_tcb = pSigTcb;	    }	return;	}    /*     * Force delivery of the signal.     */    if (taskIdCurrent != pTcb)	{	int args[2];	struct sigcontext *pCtx;#if _STACK_DIR == _STACK_GROWS_DOWN	pCtx = (struct sigcontext *) MEM_ROUND_DOWN	       (((struct sigcontext *)_sigCtxStackEnd (&pTcb->regs)) - 1);#else	taskRegsStackToTcb (pTcb);	pCtx = (struct sigcontext *)	     MEM_ROUND_UP(_sigCtxStackEnd (&pTcb->regs));#endif	args[0] = 1;	args[1] = (int)pCtx;	/*	 * Mark task as no longer waiting	 */	pSigTcb->sigt_wait     = NULL;	pCtx->sc_onstack       = 0;	pCtx->sc_restart       = sigWindRestart (pTcb);	pCtx->sc_mask          = pSigTcb->sigt_blocked;	pSigTcb->sigt_blocked |= (pSigTcb->sigt_vec[signo].sa_mask | mask);	pCtx->sc_info          = pSigPend->sigp_info;	pCtx->sc_regs          = pTcb->regs;#if CPU_FAMILY == MC680X0	pCtx->sc_fformat = pTcb->foroff;#endif#if CPU == I960KB	bcopy (pTcb->intResumptionRec, pCtx->sc_resumption, 16);#endif	pCtx->sc_pregs         = pSigPend->sigp_pregs;#if _STACK_DIR == _STACK_GROWS_DOWN	_sigCtxSetup (&pTcb->regs, (void *)STACK_ROUND_DOWN(pCtx), sigWrapper, args);#else	_sigCtxSetup (&pTcb->regs, (void *)STACK_ROUND_UP(pCtx + 1), sigWrapper, args);#endif	}    else	{	struct sigcontext Ctx;	Ctx.sc_onstack         = 0;	Ctx.sc_restart         = 0;	Ctx.sc_mask            = pSigTcb->sigt_blocked;	pSigTcb->sigt_blocked |= (pSigTcb->sigt_vec[signo].sa_mask | mask);	Ctx.sc_info            = pSigPend->sigp_info;#if CPU_FAMILY == MC680X0	Ctx.sc_fformat         = pTcb->foroff;#endif#if CPU == I960KB	bcopy (pTcb->intResumptionRec, Ctx.sc_resumption, 16);#endif	Ctx.sc_pregs           = pSigPend->sigp_pregs;	windExit ();				/* KERNEL EXIT */	if (_sigCtxSave(&Ctx.sc_regs) == 0)	    {	    _sigCtxRtnValSet (&Ctx.sc_regs, 1);	    sigWrapper(&Ctx);	    }	kernelState = TRUE;			/* KERNEL ENTER */	}    }/********************************************************************************* sigPendKill - send a queue signal** NOMANUAL** RETURNS: nothing*/int sigPendKill    (    int			tid,    struct sigpend	*pSigPend    )    {#if 0    /*     * for now, blindly assume it is valid.     */    if (!issig (pSigPend))	{	errnoSet (EINVAL);	return (ERROR);	}#endif    if (kernelState || (INT_CONTEXT () && (int) taskIdCurrent == tid))	{	if (TASK_ID_VERIFY (tid) != OK)	    {	    errnoSet (EINVAL);	    return (ERROR);	    }	excJobAdd ((VOIDFUNCPTR) sigPendKill, tid, (int) pSigPend, 0, 0, 0, 0);	return (OK);	}    kernelState = TRUE;				/* KERNEL ENTER */     if (TASK_ID_VERIFY (tid) != OK)		/* verify task */	{	windExit ();				/* KERNEL EXIT */	errnoSet (EINVAL);	return (ERROR);	}    sigWindPendKill ((WIND_TCB *) tid, pSigPend);	/* signal a task */     windExit ();				/* KERNEL EXIT */     return (OK);    }/********************************************************************************* sigPendInit - init a queue signal** NOMANUAL** RETURNS: nothing*/void sigPendInit    (    struct sigpend	*pSigPend    )    {    pSigPend->sigp_q.sigq_prev = pSigPend->sigp_q.sigq_next = NULL;    pSigPend->sigp_overruns = 0;     pSigPend->sigp_pregs = NULL;     }/********************************************************************************* sigPendDestroy - destory a queue signal** NOMANUAL** RETURNS: OK or ERROR*/int sigPendDestroy    (    struct sigpend	*pSigPend    )    {    if (INT_RESTRICT () != OK)	return (ERROR);    pSigPend->sigp_overruns = 0;     kernelState = TRUE;				/* KERNEL ENTER */    if (pSigPend->sigp_q.sigq_next != 0)	{	/*	 * Clear sigpending if last one on chain. (and there was no kilsigs)	 */	if (pSigPend->sigp_q.sigq_next == pSigPend->sigp_q.sigq_prev)	    pSigPend->sigp_tcb->sigt_pending &=    		(pSigPend->sigp_tcb->sigt_kilsigs |		~sigmask(pSigPend->sigp_info.si_signo));	pSigPend->sigp_q.sigq_next->sigq_prev = pSigPend->sigp_q.sigq_prev;	pSigPend->sigp_q.sigq_prev->sigq_next = pSigPend->sigp_q.sigq_next;	pSigPend->sigp_q.sigq_prev = pSigPend->sigp_q.sigq_next = NULL;	}    windExit ();				/* KERNEL EXIT */    return (OK);    }/********************************************************************************* sigWindKill - do the dirty work of sending a signal.** NOTE: YOU MUST BE IN THE KERNEL.*/static void sigWindKill    (    WIND_TCB		*pTcb,    int			signo    )    {    struct sigpend pend;    pend.sigp_info.si_signo	      = signo;    pend.sigp_info.si_code            = SI_KILL;    pend.sigp_info.si_value.sival_int = 0;    sigWindPendKill(pTcb, &pend);    }/********************************************************************************* sigWindRestart - test the state of a task** Test the state of a task you are sending a signal to.  If it is* pended, tell it to restart itself after it has returned.** NOTE: YOU MUST BE IN THE KERNEL.*/static int sigWindRestart    (    WIND_TCB		*pTcb    )    {    int delay = WAIT_FOREVER;    int status;			/* Q_REMOVE return value */    if ((pTcb->status & (WIND_PEND | WIND_DELAY)) != 0)	{	taskRtnValueSet (pTcb, RESTART);	if ((pTcb->status & WIND_DELAY) != 0)	    {	    pTcb->status &= ~WIND_DELAY;	    Q_REMOVE (&tickQHead, &pTcb->tickNode);	/* remove from queue */	    delay = Q_KEY (&tickQHead, &pTcb->tickNode, 1);	    }	if ((pTcb->status & WIND_PEND) != 0)	    {	    pTcb->pPriMutex = NULL;			/* clear pPriMutex */	    pTcb->status   &= ~WIND_PEND;		/* turn off pend bit */	    status = Q_REMOVE (pTcb->pPendQ, pTcb);	/* out of pend queue */	    /* 	     * If task was pended on a shared semaphore its shared TCB 	     * could have been remove by a semGive on another CPU.  In that 	     * case Q_REMOVE returns ALREADY_REMOVED, What we have to do	     * is set task return value to OK to avoid task to be restarted.	     * Q_REMOVE can also return ERROR if it was unable to take 	     * the shared semaphore lock to remove the shared TCB.	     * In that case we set task return value to ERROR and 	     * errorStatus to S_smObjLib_LOCK_TIMEOUT.	     */	    switch (status)		{		case ALREADY_REMOVED :		    {		    taskRtnValueSet (pTcb, OK);		    break;		    }		case ERROR :		    {		    taskRtnValueSet (pTcb, ERROR);		    pTcb->errorStatus = S_smObjLib_LOCK_TIMEOUT;		    break;		    }		}	    }	if (pTcb->status == WIND_READY)			/* task is now ready */	    Q_PUT (&readyQHead, pTcb, pTcb->priority);	}    return (delay);    }/********************************************************************************* sigExcSend - signal a task that has an exception** RETURNS: nothing*/static void sigExcSend    (    int		signo,    int		code,    REG_SET	*pRegSet    )    {    struct sigpend pend;    REG_SET *pTmpRegSet;    pTmpRegSet = taskIdCurrent->pExcRegSet;    taskIdCurrent->pExcRegSet = 0;    sigPendInit (&pend);    pend.sigp_info.si_signo	      = signo;    pend.sigp_info.si_code            = SI_SYNC;    pend.sigp_info.si_value.sival_int = code;    pend.sigp_pregs                   = pRegSet;    sigPendKill ((int) taskIdCurrent, &pend);    sigPendDestroy (&pend);    taskIdCurrent->pExcRegSet = pTmpRegSet;    }/********************************************************************************* sigExcKill - signal a task that has an exception** RETURNS: nothing*/static void sigExcKill    (    int      faultType,    int      code,    REG_SET  *pRegSet    )    {    extern struct sigfaulttable _sigfaulttable[];    struct sigfaulttable *pFTab;    for (pFTab = &_sigfaulttable[0]; 	 !((pFTab->sigf_fault == 0) && (pFTab->sigf_signo == 0));	 pFTab++)	{	if (pFTab->sigf_fault == faultType)	    {	    sigExcSend (pFTab->sigf_signo, code, pRegSet);	    return;	    }	}    /* not found in the table */    if (pFTab->sigf_signo != 0)        sigExcSend (pFTab->sigf_signo, code, pReg

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线看一区二区| 日韩影视精彩在线| 成人精品gif动图一区| 91精品国产综合久久久蜜臀粉嫩| 日精品一区二区| 在线不卡a资源高清| 夜夜爽夜夜爽精品视频| 7777精品伊人久久久大香线蕉完整版| 亚洲一二三四在线| 欧美四级电影在线观看| 日韩精品一二三区| 7777精品伊人久久久大香线蕉超级流畅| 亚洲午夜精品久久久久久久久| 欧美精品123区| 精品在线免费视频| 久久欧美中文字幕| 97国产一区二区| 亚洲精品伦理在线| 欧美人成免费网站| 国产美女视频91| 亚洲欧洲日本在线| 成人av片在线观看| 天涯成人国产亚洲精品一区av| 91 com成人网| 视频一区国产视频| 中文字幕精品三区| 91片在线免费观看| 五月天一区二区| 亚洲精品在线电影| 99久久久精品| 视频精品一区二区| 欧美精品一区二区不卡| 成人性生交大片免费看视频在线 | 久久只精品国产| 成人ar影院免费观看视频| 一区二区三区在线视频观看58| 欧美精品九九99久久| 国产盗摄女厕一区二区三区| 亚洲一二三四久久| 亚洲精品在线电影| 欧洲视频一区二区| 国产乱码精品一区二区三区五月婷| 亚洲精品videosex极品| 91精品国产91久久久久久一区二区| 国产伦理精品不卡| 午夜精品123| 欧美国产亚洲另类动漫| 欧美视频中文字幕| 91丨porny丨蝌蚪视频| 精品亚洲porn| 亚洲视频综合在线| 国产清纯在线一区二区www| 在线国产亚洲欧美| 国产成人在线观看| 蜜桃一区二区三区四区| 1024成人网| 精品久久久久久亚洲综合网| 欧美日韩国产三级| fc2成人免费人成在线观看播放| 亚洲蜜桃精久久久久久久| 欧美激情一区二区三区四区| 51精品秘密在线观看| 99久久伊人久久99| 国产精品亚洲第一区在线暖暖韩国| 亚洲曰韩产成在线| 一区二区三区蜜桃| 国产精品国产三级国产专播品爱网| 国产亚洲自拍一区| av不卡一区二区三区| 国产精品一区二区x88av| 视频精品一区二区| 亚洲少妇屁股交4| 国产精品美女久久久久久2018| 日韩精品一区二区三区老鸭窝| 99国产精品久久久久| 成人午夜电影小说| 极品美女销魂一区二区三区| 久久精工是国产品牌吗| 日本视频一区二区三区| 午夜精品视频在线观看| 日韩国产高清在线| 亚洲一区二区av在线| 亚洲天堂福利av| 一区二区视频在线看| 综合色天天鬼久久鬼色| 国产精品白丝在线| 国产精品进线69影院| 国产日韩综合av| 中文字幕一区二区在线观看 | 欧美日韩免费不卡视频一区二区三区| 国产乱人伦精品一区二区在线观看| 国产一区二区三区久久悠悠色av| 男人的j进女人的j一区| 日产国产欧美视频一区精品| 同产精品九九九| 亚洲香肠在线观看| 1区2区3区国产精品| 欧美第一区第二区| 精品国产一区二区三区久久久蜜月 | 五月综合激情日本mⅴ| 亚洲曰韩产成在线| 亚洲va在线va天堂| 一区二区三区在线免费| 亚洲精品日韩综合观看成人91| 最好看的中文字幕久久| 亚洲国产日韩综合久久精品| 亚洲va欧美va人人爽午夜| 亚洲福利电影网| 黄色日韩网站视频| 成人激情校园春色| 一道本成人在线| 日韩午夜激情av| 中文字幕免费一区| 亚洲视频在线观看一区| 日本成人中文字幕| 激情五月播播久久久精品| 久久精品免费看| 99re在线精品| 欧美日韩精品欧美日韩精品一| 一本大道综合伊人精品热热| 精品国产一区久久| 国产精品国产三级国产普通话99 | 337p粉嫩大胆噜噜噜噜噜91av| 国产午夜精品理论片a级大结局| 国产精品无码永久免费888| 偷拍与自拍一区| 国产成人免费av在线| 91色.com| 久久伊人中文字幕| 亚洲综合偷拍欧美一区色| 理论片日本一区| 欧美色爱综合网| 久久色.com| 国产精品高清亚洲| 亚洲成人久久影院| 国内精品在线播放| 色婷婷国产精品综合在线观看| 777欧美精品| 中文字幕制服丝袜一区二区三区| 亚洲国产精品久久人人爱| 国产在线看一区| 在线播放中文一区| 亚洲啪啪综合av一区二区三区| 日本特黄久久久高潮| 欧美性受xxxx| 欧美激情资源网| 婷婷成人激情在线网| 91久久精品日日躁夜夜躁欧美| 日韩欧美国产一区二区在线播放| 专区另类欧美日韩| 国产盗摄女厕一区二区三区| 欧美影院午夜播放| 国产精品久久久久久久久免费桃花 | 最新中文字幕一区二区三区| 九九九精品视频| 欧美一级片在线| 日韩成人午夜电影| 在线不卡欧美精品一区二区三区| 亚洲第一电影网| 欧美日韩在线观看一区二区 | 国产精品亚洲第一区在线暖暖韩国| 欧美一级日韩免费不卡| 午夜av区久久| 制服丝袜亚洲播放| 日韩黄色免费电影| 777奇米四色成人影色区| 日本不卡123| 欧美一级高清片| 首页综合国产亚洲丝袜| 91精品国产麻豆国产自产在线| 亚洲一区av在线| 欧美日韩亚洲综合一区| 一区二区三区产品免费精品久久75| 91免费国产在线| 亚洲大片一区二区三区| 欧美影视一区在线| 亚洲国产精品麻豆| 日韩女优av电影在线观看| 久久97超碰国产精品超碰| 亚洲精品在线三区| 成年人国产精品| 曰韩精品一区二区| 7878成人国产在线观看| 韩国在线一区二区| 国产精品第四页| 色老综合老女人久久久| 亚洲aaa精品| 日韩欧美一卡二卡| 成人性生交大合| 亚洲在线视频免费观看| 日韩一二在线观看| 国产成人精品免费在线| 亚洲欧美在线视频| 欧美探花视频资源| 久久精品国产999大香线蕉| 国产丝袜在线精品| 91蜜桃免费观看视频| 日韩av在线免费观看不卡| 国产亚洲一区二区三区四区| 99精品视频在线观看免费|