diff options
Diffstat (limited to 'c/src/libchip/shmdr/poll.c')
-rw-r--r-- | c/src/libchip/shmdr/poll.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/c/src/libchip/shmdr/poll.c b/c/src/libchip/shmdr/poll.c index 43f6711ff9..c833d49254 100644 --- a/c/src/libchip/shmdr/poll.c +++ b/c/src/libchip/shmdr/poll.c @@ -16,10 +16,11 @@ * to the copyright license under the clause at DFARS 252.227-7013. This * notice must appear in all copies of this file and its derivatives. * - * $Id$ + * poll.c,v 1.2 1995/05/09 20:22:57 joel Exp */ #include <rtems.h> +#include <rtems/sysstate.h> #include "shm.h" #include "clockdrv.h" @@ -29,12 +30,22 @@ void Shm_Poll() Clock_isr( 0 ); /* invoke standard clock ISR */ - /* enable_tracing(); */ - /* ticks += 1; */ - Shm_Lock( Shm_Local_receive_queue ); - tmpfront = Shm_Local_receive_queue->front; - Shm_Unlock( Shm_Local_receive_queue ); - if ( Shm_Convert(tmpfront) == Shm_Locked_queue_End_of_list ) return; - rtems_multiprocessing_announce(); - Shm_Interrupt_count++; + + /* + * Check for msgs only if we are "up" + * This avoids a race condition where we may get a clock + * interrupt before MPCI has completed its init + */ + + if (_System_state_Is_up(_System_state_Get())) + { + /* enable_tracing(); */ + /* ticks += 1; */ + Shm_Lock( Shm_Local_receive_queue ); + tmpfront = Shm_Local_receive_queue->front; + Shm_Unlock( Shm_Local_receive_queue ); + if ( Shm_Convert(tmpfront) == Shm_Locked_queue_End_of_list ) return; + rtems_multiprocessing_announce(); + Shm_Interrupt_count++; + } } |