Improved description of the function. Renamed the function as well so future users...
authorFilippo Gioachin <gioachin@uiuc.edu>
Fri, 5 Feb 2010 02:01:49 +0000 (20:01 -0600)
committerFilippo Gioachin <gioachin@uiuc.edu>
Fri, 5 Feb 2010 02:03:42 +0000 (20:03 -0600)
Made this function static since it is used only in this file.

src/ck-core/ck.C

index ad095737be3908e03cca356a75b08a6d11702f13..7afcef5b82dfc24bddb4c670108f4aa11cc568a0 100644 (file)
@@ -887,11 +887,15 @@ static inline void _processForVidMsg(CkCoreState *ck,envelope *env)
 /************** Receive: Groups ****************/
 
 /**
- This message is sent to this groupID--prepare to
- handle this message by looking up the group,
- and possibly stashing the message.
+ Return a pointer to the local BOC of "groupID".
+ The message "env" passed in has some known dependency on this groupID
+ (either it is to be delivered to this BOC, or it depends on this BOC being there).
+ Therefore, if the return value is NULL, this function buffers the massage so that
+ it will be re-sent (by CkCreateLocalBranch) when this groupID is eventually constructed.
+ The message passed in must have its handlers correctly set so that it can be
+ scheduled again.
 */
-IrrGroup *_lookupGroup(CkCoreState *ck,envelope *env,const CkGroupID &groupID)
+static inline IrrGroup *_lookupGroupAndBufferIfNotThere(CkCoreState *ck,envelope *env,const CkGroupID &groupID)
 {
 
        CmiImmediateLock(CkpvAccess(_groupTableImmLock));
@@ -928,7 +932,7 @@ static inline void _deliverForBocMsg(CkCoreState *ck,int epIdx,envelope *env,Irr
 static inline void _processForBocMsg(CkCoreState *ck,envelope *env)
 {
   register CkGroupID groupID =  env->getGroupNum();
-  register IrrGroup *obj = _lookupGroup(ck,env,env->getGroupNum());
+  register IrrGroup *obj = _lookupGroupAndBufferIfNotThere(ck,env,env->getGroupNum());
   if(obj) {
     _deliverForBocMsg(ck,env->getEpIdx(),env,obj);
   }
@@ -982,7 +986,7 @@ void _processBocInitMsg(CkCoreState *ck,envelope *env)
   register int epIdx = env->getEpIdx();
   if (!env->getGroupDep().isZero()) {      // dependence
     CkGroupID dep = env->getGroupDep();
-    IrrGroup *obj = _lookupGroup(ck,env,dep);
+    IrrGroup *obj = _lookupGroupAndBufferIfNotThere(ck,env,dep);
     if (obj == NULL) return;
   }
   else
@@ -1000,14 +1004,14 @@ void _processNodeBocInitMsg(CkCoreState *ck,envelope *env)
 /************** Receive: Arrays *************/
 
 static void _processArrayEltInitMsg(CkCoreState *ck,envelope *env) {
-  CkArray *mgr=(CkArray *)_lookupGroup(ck,env,env->getsetArrayMgr());
+  CkArray *mgr=(CkArray *)_lookupGroupAndBufferIfNotThere(ck,env,env->getsetArrayMgr());
   if (mgr) {
     _SET_USED(env, 0);
     mgr->insertElement((CkMessage *)EnvToUsr(env));
   }
 }
 static void _processArrayEltMsg(CkCoreState *ck,envelope *env) {
-  CkArray *mgr=(CkArray *)_lookupGroup(ck,env,env->getsetArrayMgr());
+  CkArray *mgr=(CkArray *)_lookupGroupAndBufferIfNotThere(ck,env,env->getsetArrayMgr());
   if (mgr) {
     _SET_USED(env, 0);
     mgr->getLocMgr()->deliverInline((CkMessage *)EnvToUsr(env));