Changes CsdScheduler to adhere to new semantics:
authorMilind Bhandarkar <milind@cs.uiuc.edu>
Tue, 12 Nov 1996 16:31:26 +0000 (16:31 +0000)
committerMilind Bhandarkar <milind@cs.uiuc.edu>
Tue, 12 Nov 1996 16:31:26 +0000 (16:31 +0000)
1. CsdScheduler(0): process all pending messages, and return. (except **)
2. CsdScheduler(-1): process messages in an infinite loop (except **)
3. CsdScheduler(k), k>0: process k messages and return (except **)

(** Exception: also return after CsdStopScheduler is called (after the
handler returns).

src/conv-core/convcore.c

index 82f847a66376ae189f47149251438018a98d0958..4110bd65038cb1daf1cf03cb9f9336548fe542d7 100644 (file)
@@ -623,6 +623,17 @@ int maxmsgs;
   
   CpvAccess(CsdStopFlag) = 0 ;
   
+  if(maxmsgs == 0) {
+    maxmsgs = CmiDeliverMsgs(maxmsgs);
+    if (CpvAccess(CsdStopFlag)) return maxmsgs;
+    while( !CqsEmpty(CpvAccess(CsdSchedQueue)) ) {
+      CqsDequeue(CpvAccess(CsdSchedQueue),&msg);
+      (CmiGetHandlerFunction(msg))(msg);
+      if (CpvAccess(CsdStopFlag)) return maxmsgs;
+      maxmsgs--;
+    }
+    return maxmsgs;
+  }
   while (1) {
     maxmsgs = CmiDeliverMsgs(maxmsgs);
     if (maxmsgs == 0) return maxmsgs;