diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1996-05-23 15:35:26 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1996-05-23 15:35:26 +0000 |
commit | 859f17ce2213434fcaff8c28fd2cbcecc39a862a (patch) | |
tree | 1cfd71d0ac5b2ae5570e6250d563c64ec12653b8 /cpukit/score/src | |
parent | updates from Tony Bennett. (diff) | |
download | rtems-859f17ce2213434fcaff8c28fd2cbcecc39a862a.tar.bz2 |
invoke thread stack free routine instead of Workspace free.
Diffstat (limited to 'cpukit/score/src')
-rw-r--r-- | cpukit/score/src/thread.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/cpukit/score/src/thread.c b/cpukit/score/src/thread.c index afd36a0fd8..756390e504 100644 --- a/cpukit/score/src/thread.c +++ b/cpukit/score/src/thread.c @@ -630,7 +630,7 @@ void _Thread_Close( (void) _Workspace_Free( the_thread->Start.fp_context ); if ( the_thread->Start.stack ) - (void) _Workspace_Free( the_thread->Start.stack ); + (void) _Thread_Stack_Free( the_thread->Start.stack ); if ( the_thread->extensions ) (void) _Workspace_Free( the_thread->extensions ); @@ -995,10 +995,25 @@ void _Thread_Load_environment( * * _Thread_Handler * + * This routine is the "primal" entry point for all threads. + * _Context_Initialize() dummies up the thread's initial context + * to cause the first Context_Switch() to jump to _Thread_Handler(). + * * This routine is the default thread exitted error handler. It is * returned to when a thread exits. The configured fatal error handler * is invoked to process the exit. * + * NOTE: + * + * On entry, it is assumed all interrupts are blocked and that this + * routine needs to set the initial isr level. This may or may not + * actually be needed by the context switch routine and as a result + * interrupts may already be at there proper level. Either way, + * setting the initial isr level properly here is safe. + * + * Currently this is only really needed for the posix port, + * ref: _Context_Switch in unix/cpu.c + * * Input parameters: NONE * * Output parameters: NONE @@ -1006,9 +1021,18 @@ void _Thread_Load_environment( void _Thread_Handler( void ) { + ISR_Level level; Thread_Control *executing; - + executing = _Thread_Executing; + + /* + * have to put level into a register for those cpu's that use + * inline asm here + */ + + level = executing->Start.isr_level; + _ISR_Enable(level); /* * Take care that 'begin' extensions get to complete before |