SYSCALL ER_UINT can_wup(ID tskid) { TCB *tcb; ER_UINT ercd; LOG_CAN_WUP_ENTER(tskid); CHECK_TSKCTX_UNL(); CHECK_TSKID_SELF(tskid); tcb = get_tcb_self(tskid); t_lock_cpu(); if (TSTAT_DORMANT(tcb->tstat)) { ercd = E_OBJ; } else { ercd = tcb->wupcnt ? 1 : 0; tcb->wupcnt = FALSE; } t_unlock_cpu(); exit: LOG_CAN_WUP_LEAVE(ercd); return(ercd); }
ER_UINT can_wup(ID tskid) { TCB *p_tcb; ER_UINT ercd; LOG_CAN_WUP_ENTER(tskid); CHECK_TSKCTX_UNL(); CHECK_TSKID_SELF(tskid); p_tcb = get_tcb_self(tskid); t_lock_cpu(); if (p_tcb->p_tinib->tskatr == TA_NOEXS) { ercd = E_NOEXS; } else if (VIOLATE_ACPTN(p_tcb->p_tinib->acvct.acptn1)) { ercd = E_OACV; } else if (TSTAT_DORMANT(p_tcb->tstat)) { ercd = E_OBJ; } else { ercd = p_tcb->wupque ? 1 : 0; p_tcb->wupque = false; } t_unlock_cpu(); error_exit: LOG_CAN_WUP_LEAVE(ercd); return(ercd); }
ER_UINT can_wup(ID tskid) { TCB *p_tcb; ER_UINT ercd; LOG_CAN_WUP_ENTER(tskid); CHECK_TSKCTX_UNL(); if (tskid == TSK_SELF) { p_tcb = p_runtsk; } else { CHECK_ID(VALID_TSKID(tskid)); p_tcb = get_tcb(tskid); } lock_cpu(); if (p_tcb->p_tinib->tskatr == TA_NOEXS) { ercd = E_NOEXS; } else if (TSTAT_DORMANT(p_tcb->tstat)) { ercd = E_OBJ; } else { ercd = p_tcb->wupque ? 1 : 0; p_tcb->wupque = false; } unlock_cpu(); error_exit: LOG_CAN_WUP_LEAVE(ercd); return(ercd); }
ER_UINT can_wup(ID tskid) { TCB *p_tcb; ER_UINT ercd; LOG_CAN_WUP_ENTER(tskid); CHECK_TSKCTX_UNL(); CHECK_TSKID_SELF(tskid); p_tcb = get_tcb_self(tskid); t_lock_cpu(); if (TSTAT_DORMANT(p_tcb->tstat)) { ercd = E_OBJ; } else { ercd = p_tcb->wupque ? 1 : 0; p_tcb->wupque = false; } t_unlock_cpu(); error_exit: LOG_CAN_WUP_LEAVE(ercd); return(ercd); }