EXPORT void knl_make_wait_reltim( RELTIM tmout, ATR atr ) { switch ( knl_ctxtsk->state ) { case TS_READY: knl_make_non_ready(knl_ctxtsk); knl_ctxtsk->state = TS_WAIT; break; case TS_SUSPEND: knl_ctxtsk->state = TS_WAITSUS; break; } knl_timer_insert_reltim(&knl_ctxtsk->wtmeb, tmout, (CBACK)knl_wait_release_tmout, knl_ctxtsk); }
/* * Task finalization * Call from critical section */ EXPORT void knl_ter_tsk( TCB *tcb ) { TSTAT state; state = (TSTAT)tcb->state; if ( state == TS_READY ) { knl_make_non_ready(tcb); } else if ( (state & TS_WAIT) != 0 ) { knl_wait_cancel(tcb); if ( tcb->wspec->rel_wai_hook != NULL ) { (*tcb->wspec->rel_wai_hook)(tcb); } } #if CFN_MAX_MTXID > 0 /* signal mutex */ knl_signal_all_mutex(tcb); #endif knl_cleanup_context(tcb); }