fixed a subtle bug in handling immediate msg in SMP mode when there's only one worker...
authorChao Mei <chaomei2@illinois.edu>
Thu, 19 May 2011 07:01:54 +0000 (02:01 -0500)
committerChao Mei <chaomei2@illinois.edu>
Thu, 19 May 2011 07:01:54 +0000 (02:01 -0500)
src/arch/util/machine-common.c

index 67b78c77a61b7f177fc13a27c01ec07195bd9283..541715c2872dda9496ccbce34f99ed8a9e7b43fe 100644 (file)
@@ -1004,7 +1004,17 @@ void *CmiGetNonLocal(void) {
     CmiState cs = CmiGetState();
     void *msg = NULL;
 
+#if !CMK_SMP || CMK_SMP_NO_COMMTHD
+    /**
+      * In SMP mode with comm thread, it's possible a normal
+      * msg is sent from an immediate msg which is executed
+      * on comm thread. In this case, the msg is sent to
+      * the network queue of the work thread. Therefore,
+      * even there's only one worker thread, the polling of
+      * network queue is still required. -Chao Mei
+      */
     if (CmiNumPes() == 1) return NULL;
+#endif
 
     MACHSTATE2(3, "[%p] CmiGetNonLocal begin %d{", cs, CmiMyPe());
     CmiIdleLock_checkMessage(&cs->idle);