2003-02-11 Joel Sherrill <joel@OARcorp.com>

* irq.c: Rework logic that decides when to call
	_Thread_Dispatch.  Analysis by Sergei Organov <osv@javad.ru>
	determined that _ISR_Signals_to_thread_executing was not being
	honored and/or cleared properly.
This commit is contained in:
Joel Sherrill
2003-02-11 23:43:11 +00:00
parent 92e57ea26c
commit 4b83378280
2 changed files with 19 additions and 5 deletions

View File

@@ -1,3 +1,10 @@
2003-02-11 Joel Sherrill <joel@OARcorp.com>
* irq.c: Rework logic that decides when to call
_Thread_Dispatch. Analysis by Sergei Organov <osv@javad.ru>
determined that _ISR_Signals_to_thread_executing was not being
honored and/or cleared properly.
2002-12-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: Require autoconf-2.57 + automake-1.7.2.

View File

@@ -73,10 +73,17 @@ void __ISR_Handler(unsigned32 vector, void *isr_sp)
_Thread_Dispatch_disable_level--;
_CPU_ISR_Enable( level );
if ( _Thread_Dispatch_disable_level == 0 ) {
if ( _Context_Switch_necessary || !_ISR_Signals_to_thread_executing ) {
_ISR_Signals_to_thread_executing = FALSE;
_Thread_Dispatch();
}
if ( _ISR_Nest_level )
return;
if ( _Thread_Dispatch_disable_level ) {
_ISR_Signals_to_thread_executing = FALSE;
return;
}
if ( _Context_Switch_necessary || _ISR_Signals_to_thread_executing ) {
_ISR_Signals_to_thread_executing = FALSE;
_Thread_Dispatch();
}
}