diff options
Diffstat (limited to 'cpukit')
-rw-r--r-- | cpukit/sapi/src/interrtext.c | 3 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/interr.h | 3 | ||||
-rw-r--r-- | cpukit/score/src/threadrestart.c | 8 |
3 files changed, 12 insertions, 2 deletions
diff --git a/cpukit/sapi/src/interrtext.c b/cpukit/sapi/src/interrtext.c index a18610cf77..e08414bf9f 100644 --- a/cpukit/sapi/src/interrtext.c +++ b/cpukit/sapi/src/interrtext.c @@ -51,7 +51,8 @@ static const char *const internal_error_text[] = { "INTERNAL_ERROR_GXX_KEY_ADD_FAILED", "INTERNAL_ERROR_GXX_MUTEX_INIT_FAILED", "INTERNAL_ERROR_NO_MEMORY_FOR_HEAP", - "INTERNAL_ERROR_CPU_ISR_INSTALL_VECTOR" + "INTERNAL_ERROR_CPU_ISR_INSTALL_VECTOR", + "INTERNAL_ERROR_RESOURCE_IN_USE" }; const char *rtems_internal_error_text( rtems_fatal_code error ) diff --git a/cpukit/score/include/rtems/score/interr.h b/cpukit/score/include/rtems/score/interr.h index 8c647f5d0f..2100c13e07 100644 --- a/cpukit/score/include/rtems/score/interr.h +++ b/cpukit/score/include/rtems/score/interr.h @@ -147,7 +147,8 @@ typedef enum { INTERNAL_ERROR_GXX_KEY_ADD_FAILED, INTERNAL_ERROR_GXX_MUTEX_INIT_FAILED, INTERNAL_ERROR_NO_MEMORY_FOR_HEAP, - INTERNAL_ERROR_CPU_ISR_INSTALL_VECTOR + INTERNAL_ERROR_CPU_ISR_INSTALL_VECTOR, + INTERNAL_ERROR_RESOURCE_IN_USE } Internal_errors_Core_list; typedef uint32_t Internal_errors_t; diff --git a/cpukit/score/src/threadrestart.c b/cpukit/score/src/threadrestart.c index 4b83edefb7..02371acfdb 100644 --- a/cpukit/score/src/threadrestart.c +++ b/cpukit/score/src/threadrestart.c @@ -47,6 +47,14 @@ static void _Thread_Make_zombie( Thread_Control *the_thread ) ISR_lock_Context lock_context; Thread_Zombie_control *zombies = &_Thread_Zombies; + if ( the_thread->resource_count != 0 ) { + _Terminate( + INTERNAL_ERROR_CORE, + false, + INTERNAL_ERROR_RESOURCE_IN_USE + ); + } + _Thread_Set_state( the_thread, STATES_ZOMBIE ); _Thread_queue_Extract_with_proxy( the_thread ); _Watchdog_Remove( &the_thread->Timer ); |