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

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

?? siglib.c

?? vxworks 5.5 kernel code
?? 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久久免费观看| 奇米精品一区二区三区四区| 欧美一区日韩一区| 亚洲成人先锋电影| 在线精品国精品国产尤物884a| 亚洲成人免费观看| 在线视频一区二区三区| 日韩午夜精品视频| 亚洲gay无套男同| 国产成人自拍网| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 日韩美女一区二区三区四区| 亚洲3atv精品一区二区三区| 欧美日韩一区二区三区四区| 性感美女久久精品| 欧美日韩国产成人在线免费| 亚洲欧美另类图片小说| 福利一区二区在线| 午夜精品免费在线观看| 欧美一区二区三区在线观看视频| 丰满亚洲少妇av| 精品一区二区三区免费观看| 日韩电影一区二区三区四区| 欧美国产精品一区| 精品福利在线导航| 日韩片之四级片| 欧美一区午夜精品| 精品视频免费看| 丁香激情综合五月| 99久久精品国产麻豆演员表| 色综合天天综合网天天狠天天| 亚洲bt欧美bt精品| 国产精品乱码人人做人人爱| 久久久久久影视| 1区2区3区国产精品| 亚洲成av人片在线观看无码| 美女精品自拍一二三四| av资源网一区| 欧美一区二区三区四区高清 | 91极品视觉盛宴| 91麻豆精品国产91久久久久久 | 韩国精品在线观看| 亚洲r级在线视频| 青青草成人在线观看| 天天综合色天天| 色综合天天综合色综合av| 国产精品一区久久久久| 亚洲3atv精品一区二区三区| 久久久久国产精品人| 色综合天天综合在线视频| 亚洲高清三级视频| 免费在线观看日韩欧美| 亚洲日韩欧美一区二区在线| 精品少妇一区二区三区| 国产日韩欧美综合一区| 亚洲欧美在线视频| 亚洲激情自拍视频| 久久99久久精品| 国产aⅴ精品一区二区三区色成熟| 成人精品gif动图一区| 狠狠久久亚洲欧美| 日本韩国视频一区二区| 久久久久国产精品厨房| 亚洲精品免费电影| 国产精品一区二区三区99| 99久久99久久免费精品蜜臀| 91精选在线观看| 亚洲欧美日韩一区二区| 黄色日韩三级电影| 91精品国产91久久久久久最新毛片 | 国产精品不卡视频| 日韩欧美卡一卡二| 18欧美亚洲精品| 一区二区日韩av| 亚洲曰韩产成在线| 麻豆成人91精品二区三区| 日韩国产欧美一区二区三区| 亚洲成人av一区二区| 不卡的av中国片| 亚洲国产精品天堂| 国产精品一区二区在线播放| 视频一区二区三区中文字幕| 国产毛片精品国产一区二区三区| 国产一区二区看久久| 69av一区二区三区| 中文字幕中文字幕一区二区| 亚洲美女淫视频| 五月天国产精品| 欧美老肥妇做.爰bbww| 一区二区三区中文字幕电影| 色哟哟精品一区| 亚洲丝袜精品丝袜在线| 91免费国产视频网站| 一区二区三区欧美视频| 色久综合一二码| 午夜精品久久久| 91精品国产综合久久精品性色| 亚洲免费av高清| 欧美三级电影在线观看| 亚洲一线二线三线久久久| 99国产精品视频免费观看| 亚洲国产精品一区二区www在线| 欧美图区在线视频| 亚洲一区在线观看免费观看电影高清| 欧洲av一区二区嗯嗯嗯啊| 首页国产欧美日韩丝袜| 久久婷婷国产综合精品青草| 成人综合激情网| 亚洲色图欧美在线| 91精品国产91热久久久做人人| 国产麻豆精品在线| 亚洲一区在线视频| 亚洲国产成人午夜在线一区| 欧美性淫爽ww久久久久无| 国产美女精品人人做人人爽 | 9l国产精品久久久久麻豆| 中文字幕佐山爱一区二区免费| 在线不卡一区二区| 972aa.com艺术欧美| 激情亚洲综合在线| 一区二区三区免费在线观看| 久久久久亚洲综合| 欧美一区二区视频网站| 91麻豆精品秘密| 成人午夜伦理影院| 国产白丝网站精品污在线入口| 天天综合色天天综合色h| 成人欧美一区二区三区黑人麻豆| 精品国产99国产精品| 欧美一卡二卡在线| 在线看不卡av| 91原创在线视频| 国产精品系列在线播放| 精品综合久久久久久8888| 亚洲成在人线免费| 在线视频欧美精品| 在线视频中文字幕一区二区| 国产亚洲精品aa午夜观看| caoporn国产一区二区| 国产精品少妇自拍| 日本精品视频一区二区| 天天射综合影视| 久久久久国产精品麻豆 | 亚洲欧美日韩中文播放 | 日韩一区二区精品葵司在线| 国产精品夜夜嗨| 亚洲三级在线免费观看| 欧美一级爆毛片| 不卡欧美aaaaa| 日韩国产欧美三级| 国产精品美女久久久久久| 欧美精品v日韩精品v韩国精品v| 国产美女一区二区三区| 一区二区三区毛片| 国产三区在线成人av| 欧美日韩国产三级| 国产福利一区二区三区视频| 亚洲国产精品久久久久婷婷884 | 国产一区二区久久| 亚洲国产精品精华液网站| 国产欧美一区二区三区沐欲| 欧美日韩亚洲综合| 成人av中文字幕| 久久99精品久久久久婷婷| 一区二区三区在线观看视频| 337p粉嫩大胆噜噜噜噜噜91av| 色天使色偷偷av一区二区| 激情五月婷婷综合| 亚洲 欧美综合在线网络| 国产精品久久久久久久久搜平片 | 99国产精品视频免费观看| 激情国产一区二区| 爽好多水快深点欧美视频| 亚洲免费在线看| 欧美国产日本韩| 精品国产精品一区二区夜夜嗨| 91福利视频在线| 北条麻妃一区二区三区| 国产一区二区伦理片| 秋霞av亚洲一区二区三| 亚洲一区二区三区中文字幕在线| 国产日韩精品一区二区三区在线| 日韩三级av在线播放| 69堂国产成人免费视频| 欧美系列一区二区| 91极品视觉盛宴| 91蜜桃婷婷狠狠久久综合9色| 国产一区二区三区精品欧美日韩一区二区三区 | 国产一区二区三区久久久| 日本一道高清亚洲日美韩| 一区二区三区欧美视频| 中文字幕在线不卡国产视频| 国产日韩av一区二区| 久久在线观看免费| 精品999在线播放| 欧美一区二区国产| 91麻豆精品国产| 欧美区视频在线观看| 欧美日韩一区在线观看| 欧美亚洲高清一区二区三区不卡|