support CsdScheduleNodePoll
authorXiang Ni <xiangni2@illinois.edu>
Mon, 16 Jan 2012 18:00:56 +0000 (12:00 -0600)
committerXiang Ni <xiangni2@illinois.edu>
Mon, 16 Jan 2012 18:00:56 +0000 (12:00 -0600)
src/conv-core/convcore.c
src/conv-core/converse.h

index 3ee0a588fa34f55232c530625ed629125bfde491..5e327d7b9e42280b17d973249cf79a55f90408f5 100644 (file)
@@ -1533,6 +1533,24 @@ void *CsdNextMessage(CsdSchedulerState_t *s) {
        return NULL;
 }
 
        return NULL;
 }
 
+
+void *CsdNextLocalNodeMessage(CsdSchedulerState_t *s) {
+       void *msg;
+#if CMK_NODE_QUEUE_AVAILABLE
+       /*#warning "CsdNextMessage: CMK_NODE_QUEUE_AVAILABLE" */
+       /*if (NULL!=(msg=CmiGetNonLocalNodeQ())) return msg;*/
+       if (!CqsEmpty(s->nodeQ))
+       {
+         CmiLock(s->nodeLock);
+         CqsDequeue(s->nodeQ,(void **)&msg);
+         CmiUnlock(s->nodeLock);
+         if (msg!=NULL) return msg;
+       }
+#endif
+       return NULL;
+
+}
+
 int CsdScheduler(int maxmsgs)
 {
        if (maxmsgs<0) CsdScheduleForever();    
 int CsdScheduler(int maxmsgs)
 {
        if (maxmsgs<0) CsdScheduleForever();    
@@ -1663,6 +1681,21 @@ void CsdSchedulePoll(void)
   }
 }
 
   }
 }
 
+void CsdScheduleNodePoll(void)
+{
+  SCHEDULE_TOP
+  while (1)
+  {
+       /*CsdPeriodic();*/
+        /*CmiMachineProgressImpl(); ??? */
+       if (NULL!=(msg = CsdNextLocalNodeMessage(&state)))
+       {
+            SCHEDULE_MESSAGE 
+       }
+       else break;
+  }
+}
+
 void CmiDeliverSpecificMsg(handler)
 int handler;
 {
 void CmiDeliverSpecificMsg(handler)
 int handler;
 {
index 9d4ac06c7a52e83a15123cb291369d1efbad585c..3e0d7a554a467e6c101d8202f3d0106aa328d009 100644 (file)
@@ -886,6 +886,7 @@ typedef struct {
 } CsdSchedulerState_t;
 extern void CsdSchedulerState_new(CsdSchedulerState_t *state);
 extern void *CsdNextMessage(CsdSchedulerState_t *state);
 } CsdSchedulerState_t;
 extern void CsdSchedulerState_new(CsdSchedulerState_t *state);
 extern void *CsdNextMessage(CsdSchedulerState_t *state);
+extern void *CsdNextLocalNodeMessage(CsdSchedulerState_t *state);
 
 extern void  *CmiGetNonLocal(void);
 extern void   CmiNotifyIdle(void);
 
 extern void  *CmiGetNonLocal(void);
 extern void   CmiNotifyIdle(void);
@@ -895,6 +896,7 @@ extern  int CsdScheduler(int maxmsgs);
 extern void CsdScheduleForever(void);
 extern  int CsdScheduleCount(int maxmsgs);
 extern void CsdSchedulePoll(void);
 extern void CsdScheduleForever(void);
 extern  int CsdScheduleCount(int maxmsgs);
 extern void CsdSchedulePoll(void);
+extern void CsdScheduleNodePoll(void);
 
 #define CsdExitScheduler()  (CpvAccess(CsdStopFlag)++)
 /** @} */
 
 #define CsdExitScheduler()  (CpvAccess(CsdStopFlag)++)
 /** @} */