diff options
Diffstat (limited to 'c/src/exec/itron/src/sus_tsk.c')
-rw-r--r-- | c/src/exec/itron/src/sus_tsk.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/c/src/exec/itron/src/sus_tsk.c b/c/src/exec/itron/src/sus_tsk.c index f4a5d5b851..12ef07ff7b 100644 --- a/c/src/exec/itron/src/sus_tsk.c +++ b/c/src/exec/itron/src/sus_tsk.c @@ -29,6 +29,33 @@ ER sus_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 ); + + switch ( location ) { + case OBJECTS_REMOTE: + case OBJECTS_ERROR: + _ITRON_return_errorno( _ITRON_Task_Clarify_get_id_error( tskid ) ); + + case OBJECTS_LOCAL: + _Thread_Suspend( the_thread ); + _Thread_Enable_dispatch(); + return E_OK; + } + + return E_OBJ; /* XXX - Should never get here */ } + + + + + + |