ER_UINT can_act(ID tskid) { TCB *p_tcb; ER_UINT ercd; LOG_CAN_ACT_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 { ercd = p_tcb->actque ? 1 : 0; p_tcb->actque = false; } t_unlock_cpu(); error_exit: LOG_CAN_ACT_LEAVE(ercd); return(ercd); }
ER_UINT can_act(ID tskid) { TCB *p_tcb; ER_UINT ercd; LOG_CAN_ACT_ENTER(tskid); CHECK_TSKCTX_UNL(); /*[NGKI1139][NGKI1140]*/ if (tskid == TSK_SELF) { p_tcb = p_runtsk; /*[NGKI1146]*/ } else { CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1141]*/ p_tcb = get_tcb(tskid); } lock_cpu(); ercd = p_tcb->actque ? 1 : 0; /*[NGKI1144]*/ p_tcb->actque = false; /*[NGKI1144]*/ unlock_cpu(); error_exit: LOG_CAN_ACT_LEAVE(ercd); return(ercd); }
SYSCALL ER_UINT can_act(ID tskid) { TCB *tcb; ER_UINT ercd; LOG_CAN_ACT_ENTER(tskid); CHECK_TSKCTX_UNL(); CHECK_TSKID_SELF(tskid); tcb = get_tcb_self(tskid); t_lock_cpu(); ercd = tcb->actcnt ? 1 : 0; tcb->actcnt = FALSE; t_unlock_cpu(); exit: LOG_CAN_ACT_LEAVE(ercd); return(ercd); }
ER_UINT can_act(ID tskid) { TCB *p_tcb; ER_UINT ercd; LOG_CAN_ACT_ENTER(tskid); CHECK_TSKCTX_UNL(); CHECK_TSKID_SELF(tskid); p_tcb = get_tcb_self(tskid); t_lock_cpu(); ercd = p_tcb->actque ? 1 : 0; p_tcb->actque = false; t_unlock_cpu(); error_exit: LOG_CAN_ACT_LEAVE(ercd); return(ercd); }
ER_UINT can_act(ID tskid) { TCB *p_tcb; ER_UINT ercd; PCB *p_pcb; LOG_CAN_ACT_ENTER(tskid); CHECK_TSKCTX_UNL(); CHECK_TSKID_SELF(tskid); t_lock_cpu(); p_tcb = get_tcb_self(tskid, get_my_p_pcb()); p_pcb = t_acquire_tsk_lock(p_tcb); ercd = p_tcb->actque ? 1 : 0; p_tcb->actque = false; p_tcb->actprc = TPRC_NONE; release_tsk_lock(p_pcb); t_unlock_cpu(); error_exit: LOG_CAN_ACT_LEAVE(ercd); return(ercd); }