summaryrefslogtreecommitdiffstats
path: root/c/src/exec/itron/src/frsm_tsk.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/exec/itron/src/frsm_tsk.c')
-rw-r--r--c/src/exec/itron/src/frsm_tsk.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/c/src/exec/itron/src/frsm_tsk.c b/c/src/exec/itron/src/frsm_tsk.c
index 8fe5e9e6fc..2840061dd6 100644
--- a/c/src/exec/itron/src/frsm_tsk.c
+++ b/c/src/exec/itron/src/frsm_tsk.c
@@ -25,7 +25,32 @@ ER frsm_tsk(
ID tskid
)
{
- return E_OK;
+ register Thread_Control *the_thread;
+ Objects_Locations location;
+
+ the_thread = _ITRON_Task_Get( tskid, &location );
+ if (!the_thread)
+ _ITRON_return_errorno( _ITRON_Task_Clarify_get_id_error( tskid ) );
+
+ if ( the_thread == _Thread_Executing )
+ _ITRON_return_errorno( E_OBJ );
+
+ if (_States_Is_dormant( the_thread->current_state ))
+ _ITRON_return_errorno( E_OBJ );
+
+ switch ( location ) {
+ case OBJECTS_REMOTE:
+ case OBJECTS_ERROR:
+ _ITRON_return_errorno( _ITRON_Task_Clarify_get_id_error( tskid ) );
+
+ case OBJECTS_LOCAL:
+ _Thread_Resume( the_thread, TRUE );
+ _Thread_Enable_dispatch();
+ return E_OK;
+ }
+
+ return E_OBJ; /* XXX - Should never get here */
+
}