summaryrefslogtreecommitdiffstats
path: root/c/src/libchip/shmdr/poll.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--c/src/libchip/shmdr/poll.c29
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++;
+ }
}