ER del_tsk(ID tskid) { TCB *p_tcb; TINIB *p_tinib; ER ercd; LOG_DEL_TSK_ENTER(tskid); CHECK_TSKCTX_UNL(); CHECK_TSKID(tskid); p_tcb = get_tcb(tskid); t_lock_cpu(); if (p_tcb->p_tinib->tskatr == TA_NOEXS) { ercd = E_NOEXS; } else if (VIOLATE_ACPTN(p_tcb->p_tinib->acvct.acptn3)) { ercd = E_OACV; } else if (TSKID(p_tcb) > tmax_stskid && TSTAT_DORMANT(p_tcb->tstat)) { p_tinib = (TINIB *)(p_tcb->p_tinib); #ifdef USE_TSKINICTXB term_tskinictxb(&(p_tinib->tskinictxb)); #else /* USE_TSKINICTXB */ if ((p_tinib->tskatr & TA_MEMALLOC) != 0U) { kernel_free(p_tinib->sstk); } #endif /* USE_TSKINICTXB */ p_tinib->tskatr = TA_NOEXS; queue_insert_prev(&free_tcb, &(p_tcb->task_queue)); ercd = E_OK; } else { ercd = E_OBJ; } t_unlock_cpu(); error_exit: LOG_DEL_TSK_LEAVE(ercd); return(ercd); }
ER del_tsk(ID tskid) { TCB *p_tcb; TINIB *p_tinib; ER ercd; LOG_DEL_TSK_ENTER(tskid); CHECK_TSKCTX_UNL(); /*[NGKI1101][NGKI1102]*/ CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1103]*/ p_tcb = get_tcb(tskid); lock_cpu(); if (p_tcb->p_tinib->tskatr == TA_NOEXS) { ercd = E_NOEXS; /*[NGKI1104]*/ } else if (tskid <= tmax_stskid || !TSTAT_DORMANT(p_tcb->tstat)) { ercd = E_OBJ; /*[NGKI1106][NGKI1107]*/ } else { p_tinib = (TINIB *)(p_tcb->p_tinib); #ifdef USE_TSKINICTXB term_tskinictxb(&(p_tinib->tskinictxb)); #else /* USE_TSKINICTXB */ if ((p_tinib->tskatr & TA_MEMALLOC) != 0U) { /*[NGKI1109]*/ kernel_free(p_tinib->stk); } #endif /* USE_TSKINICTXB */ p_tinib->tskatr = TA_NOEXS; /*[NGKI1108]*/ queue_insert_prev(&free_tcb, &(p_tcb->task_queue)); ercd = E_OK; } unlock_cpu(); error_exit: LOG_DEL_TSK_LEAVE(ercd); return(ercd); }