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

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

?? 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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区在线不卡| 精品中文字幕一区二区小辣椒| 午夜视黄欧洲亚洲| 精品国产91亚洲一区二区三区婷婷| 91在线视频免费观看| 色一情一乱一乱一91av| 久久综合九色欧美综合狠狠| 亚洲最新视频在线观看| 九色综合狠狠综合久久| 欧美三级中文字| 国产精品视频麻豆| 免费高清成人在线| 欧美日韩亚洲另类| 最新国产成人在线观看| 国产制服丝袜一区| 日韩一区二区三区电影在线观看 | 亚洲婷婷综合色高清在线| 免费一区二区视频| 欧美视频在线一区二区三区| 亚洲欧洲无码一区二区三区| 精品亚洲porn| 日韩欧美国产精品| 日韩精品久久久久久| 日本韩国欧美在线| 国产精品欧美经典| 成人精品在线视频观看| 国产三级精品三级| 国产精品一区二区果冻传媒| 欧美成人女星排行榜| 日韩成人伦理电影在线观看| 欧美视频中文字幕| 亚洲va欧美va人人爽午夜| 欧美性猛交xxxx黑人交| 亚洲精品免费一二三区| av中文一区二区三区| 国产精品久久久久久亚洲毛片| 亚洲乱码国产乱码精品精的特点| 一区二区三区高清不卡| 色婷婷亚洲综合| 亚洲自拍都市欧美小说| 欧美色图在线观看| 亚洲国产美国国产综合一区二区| 石原莉奈在线亚洲三区| 欧美日韩1区2区| 麻豆精品视频在线观看| 2014亚洲片线观看视频免费| 国产一区视频在线看| 国产欧美精品一区aⅴ影院 | 午夜视频在线观看一区二区 | 欧美精品一区二区精品网| 免费视频一区二区| 国产亚洲制服色| 成人97人人超碰人人99| 亚洲一区二区在线播放相泽 | 成人网在线免费视频| 亚洲欧洲色图综合| 欧美日韩另类国产亚洲欧美一级| 精品国产露脸精彩对白| 粗大黑人巨茎大战欧美成人| 综合婷婷亚洲小说| 91精品国产色综合久久ai换脸 | 91视频91自| 五月天丁香久久| 精品欧美久久久| 成人精品一区二区三区中文字幕 | 国产精品乱码妇女bbbb| 一本色道久久综合精品竹菊| 欧美aaa在线| 国产日韩欧美制服另类| 欧美在线观看视频在线| 麻豆精品国产91久久久久久| 中文字幕+乱码+中文字幕一区| 日韩av在线播放中文字幕| 日韩欧美国产成人一区二区| 成人午夜看片网址| 三级亚洲高清视频| 中文字幕免费一区| 91超碰这里只有精品国产| 国产aⅴ精品一区二区三区色成熟| 日韩美女天天操| 97精品久久久午夜一区二区三区 | 成人性生交大片免费看在线播放| 日韩欧美亚洲国产另类| 成人小视频在线| 麻豆免费看一区二区三区| 亚洲人成亚洲人成在线观看图片| 国产成都精品91一区二区三| 亚洲国产精品久久人人爱| 国产欧美日本一区二区三区| 日韩欧美国产午夜精品| 在线一区二区观看| 国产精品1024| 久草在线在线精品观看| 香蕉久久一区二区不卡无毒影院 | 亚洲一区二区三区四区不卡| 欧美精品一区二区三区高清aⅴ | www.性欧美| 中文av一区二区| 欧美久久久久久蜜桃| 欧美伊人久久久久久久久影院 | 精品亚洲porn| jlzzjlzz亚洲女人18| 欧美精品久久一区二区三区| 日韩欧美激情在线| 亚洲18色成人| 中文天堂在线一区| 97精品视频在线观看自产线路二| 国产精品国产三级国产普通话99 | 国产精品一二三四区| 亚洲影院免费观看| 国产伦精品一区二区三区在线观看| 国产精品色哟哟网站| 激情偷乱视频一区二区三区| 日韩丝袜美女视频| 亚洲欧美偷拍三级| 天天影视色香欲综合网老头| 成人免费一区二区三区视频| 一区二区三区四区在线免费观看 | 亚洲成在人线在线播放| 丝袜美腿亚洲色图| 日韩欧美国产一区在线观看| 日本欧洲一区二区| 国产日产精品1区| 波多野结衣91| 成人黄页在线观看| 成人激情小说乱人伦| 日韩精品在线看片z| 精品视频123区在线观看| 色综合久久综合网97色综合| 国产成a人亚洲精品| 五月婷婷久久丁香| 精品一区二区三区视频在线观看| 欧美亚洲丝袜传媒另类| 成人av电影在线观看| 粗大黑人巨茎大战欧美成人| 国产老妇另类xxxxx| 国产一区二区三区最好精华液| 国产精品天美传媒沈樵| 久久久久久99久久久精品网站| 成人免费观看av| 成人avav影音| 91丨九色porny丨蝌蚪| 琪琪久久久久日韩精品| 性久久久久久久久| 奇米影视在线99精品| 美女视频黄久久| 国产麻豆精品久久一二三| 国产剧情一区二区| 白白色亚洲国产精品| 色婷婷久久久久swag精品| 777色狠狠一区二区三区| 精品久久国产字幕高潮| 久久精品亚洲乱码伦伦中文| 国产精品成人在线观看| 亚洲一区二区精品3399| 日日摸夜夜添夜夜添国产精品 | 亚洲精品欧美综合四区| 亚洲国产精品久久人人爱| 麻豆精品新av中文字幕| 国产不卡免费视频| jizz一区二区| 在线观看亚洲a| 欧美本精品男人aⅴ天堂| 中文天堂在线一区| 亚洲高清免费一级二级三级| 国产麻豆午夜三级精品| 91黄色免费看| 91精品国产综合久久久久久久久久| 91免费看片在线观看| 欧美成人三级电影在线| 亚洲欧美在线视频| 免费在线欧美视频| 91在线视频官网| 欧美成人国产一区二区| 1区2区3区国产精品| 五月婷婷久久丁香| 97国产一区二区| 亚洲精品一区二区三区影院| 亚洲欧美日韩国产中文在线| 久草在线在线精品观看| 欧美亚洲一区二区在线观看| 欧美经典一区二区| 亚洲在线成人精品| 色综合久久综合网欧美综合网| 色综合一区二区| 亚洲精品一区二区三区福利| 亚洲一区二区在线免费看| 国产剧情一区二区三区| 555夜色666亚洲国产免| 亚洲国产成人一区二区三区| 国产一区二区三区高清播放| 4438成人网| 亚洲国产日韩精品| a4yy欧美一区二区三区| 精品国产免费人成电影在线观看四季| 欧美精品色综合| 国产精品―色哟哟| 国内精品写真在线观看| 9191成人精品久久| 亚洲国产精品久久不卡毛片|