summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/sapi/src/interrtext.c3
-rw-r--r--cpukit/score/include/rtems/score/interr.h3
-rw-r--r--cpukit/score/src/threadrestart.c8
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 );