diff packages/kernel/current/src/intr/intr.cxx @ 103:95f3e12a6327 ecos-sw-2000-06-23

Merge from eCos master repository on 2000-06-23-16:41:10-BST
author jlarmour
date Fri, 23 Jun 2000 17:06:31 +0000
parents 6512add4f5d6
children 0c2b7be0d798
line wrap: on
line diff
--- a/packages/kernel/current/src/intr/intr.cxx
+++ b/packages/kernel/current/src/intr/intr.cxx
@@ -330,7 +330,8 @@ Cyg_Interrupt::chain_isr(cyg_vector vect
 {
     Cyg_Interrupt *p = *(Cyg_Interrupt **)data;
     register cyg_uint32 isr_ret = 0;
-    
+    register cyg_uint32 isr_chain_ret = 0;
+
     CYG_INSTRUMENT_INTR(CHAIN_ISR, vector, 0);
 
     while( p != NULL )
@@ -339,6 +340,8 @@ Cyg_Interrupt::chain_isr(cyg_vector vect
         {
             isr_ret = p->isr(vector, p->data);
 
+            isr_chain_ret |= isr_ret;
+
             if( isr_ret & Cyg_Interrupt::CALL_DSR ) p->post_dsr();
 
             if( isr_ret & Cyg_Interrupt::HANDLED ) break;
@@ -348,7 +351,7 @@ Cyg_Interrupt::chain_isr(cyg_vector vect
     }
 
 #ifdef HAL_DEFAULT_ISR
-    if( (isr_ret & Cyg_Interrupt::HANDLED) == 0 )
+    if( (isr_chain_ret & (Cyg_Interrupt::HANDLED|Cyg_Interrupt::CALL_DSR)) == 0 )
     {
         // If we finished the loop for some reason other than that an
         // ISR has handled the interrupt, call any default ISR to either