Adding fault tolerance support for chares.
authorEsteban Meneses <emenese2@illinois.edu>
Fri, 20 Apr 2012 20:56:55 +0000 (15:56 -0500)
committerEsteban Meneses <emenese2@illinois.edu>
Fri, 20 Apr 2012 20:56:55 +0000 (15:56 -0500)
src/ck-core/ck.C
src/ck-core/ckcausalmlog.C
src/ck-core/ckcausalmlog.h

index 95eed285e97eee68f71ba610efa397654de491df..61126cc427b20f70a392a54db3283c08a44b6b83 100644 (file)
@@ -1583,6 +1583,9 @@ void CkSendMsg(int entryIdx, void *msg,const CkChareID *pCid, int opts)
   // VidBlock was not yet filled). The problem is that the creation was never
   // traced later when the VidBlock was filled. One solution is to trace the
   // creation here, the other to trace it in VidBlock->msgDeliver().
+#if defined(_FAULT_CAUSAL_)
+       sendChareMsg(env,destPE,_infoIdx,pCid);
+#else
   _TRACE_CREATION_1(env);
   if (destPE!=-1) {
     CpvAccess(_qd)->create();
@@ -1592,6 +1595,7 @@ void CkSendMsg(int entryIdx, void *msg,const CkChareID *pCid, int opts)
       _CldEnqueue(destPE, env, _infoIdx);
   }
   _TRACE_CREATION_DONE(1);
+#endif
 }
 
 extern "C"
index 3a34c31de61e3593b4e654b7a0f3ad845adea012..f87fd9c4093ea1c2c4509af0ef97107e22d928de 100644 (file)
@@ -537,6 +537,27 @@ void sendArrayMsg(envelope *env,int destPE,int _infoIdx){
        sendCommonMsg(recver,env,destPE,_infoIdx);
 };
 
+/**
+ * Sends a message to a singleton chare.
+ */
+void sendChareMsg(envelope *env,int destPE,int _infoIdx, const CkChareID *pCid){
+       CkObjID recver;
+       recver.type = TypeChare;
+       recver.data.chare.id = *pCid;
+
+       if(CpvAccess(_currentObj)!=NULL &&  CpvAccess(_currentObj)->mlogData->objID.type != TypeArray){
+               char recverString[100],senderString[100];
+               
+               DEBUG(printf("[%d] %s being sent message from non-array %s \n",CkMyPe(),recver.toString(recverString),CpvAccess(_currentObj)->mlogData->objID.toString(senderString)));
+       }
+
+       // initializing values of envelope
+       env->SN = 0;
+       env->TN = 0;
+
+       sendCommonMsg(recver,env,destPE,_infoIdx);
+};
+
 /**
  * A method to generate the actual ticket requests for groups, nodegroups or arrays.
  */
index 542bb799e9c71a54a5f45e1d6641f5625b4178be..84a2db1e9cd9f0516f8d082308b608fcae3dde2a 100644 (file)
@@ -509,6 +509,7 @@ void _messageLoggingInit();
 //Methods for sending ticket requests
 void sendGroupMsg(envelope *env,int destPE,int _infoIdx);
 void sendArrayMsg(envelope *env,int destPE,int _infoIdx);
+void sendChareMsg(envelope *env,int destPE,int _infoIdx, const CkChareID *pCid);
 void sendNodeGroupMsg(envelope *env,int destNode,int _infoIdx);
 void sendCommonMsg(CkObjID &recver,envelope *env,int destPE,int _infoIdx);
 void sendMsg(CkObjID &sender,CkObjID &recver,int destPE,MlogEntry *entry,MCount SN,MCount TN,int resend);