Added functions in CkMessageRecorder and CkMessageReplay to handle ResumeThread token...
authorFilippo Gioachin <gioachin@uiuc.edu>
Thu, 4 Feb 2010 07:24:41 +0000 (01:24 -0600)
committerFilippo Gioachin <gioachin@uiuc.edu>
Thu, 4 Feb 2010 07:24:41 +0000 (01:24 -0600)
Improved also reliability of Replayer's file reading.

src/ck-core/ck.C

index efe2232ebfd53791786eb0370e6d72cae67a1c05..3616919e59bbad218103c34b8ac5664ef188aff4 100644 (file)
@@ -1858,7 +1858,7 @@ class CkMessageRecorder : public CkMessageWatcher {
 public:
   CkMessageRecorder(FILE *f_) { f=f_; }
   ~CkMessageRecorder() {
-    fprintf(f,"-1 -1 -1");
+    fprintf(f,"-1 -1 -1 ");
     fclose(f);
   }
 
@@ -1875,6 +1875,10 @@ private:
     }
     return CmiTrue;
   }
+  virtual int process(CthThreadToken *token,CkCoreState *ck) {
+    fprintf(f, "%d %d %d\n",CkMyPe(), -2, token->serialNo);
+    return 1;
+  }
 };
 
 class CkMessageDetailRecorder : public CkMessageWatcher {
@@ -1911,10 +1915,25 @@ class CkMessageReplay : public CkMessageWatcher {
        unsigned int crc1, crc2;
        /// Read the next message we need from the file:
        void getNext(void) {
+         if (3!=fscanf(f,"%d%d%d", &nextPE,&nextSize,&nextEvent)) CkAbort("CkMessageReplay> Syntax error reading replay file");
+         if (nextSize > 0) {
+           // We are reading a regular message
+           if (3!=fscanf(f,"%d%x%x", &nexttype,&crc1,&crc2)) {
+             CkAbort("CkMessageReplay> Syntax error reading replay file");
+           }
+         } else if (nextSize == -2) {
+           // We are reading a special message (right now only thread awaken)
+           getNext(); // For now simply skip that
+         } else if (nextPE!=-1 || nextSize!=-1 || nextEvent!=-1) {
+           CkPrintf("Read from file item %d %d %d\n",nextPE,nextSize,nextEvent);
+           CkAbort("CkMessageReplay> Unrecognized input");
+         }
+           /*
                if (6!=fscanf(f,"%d%d%d%d%x%x", &nextPE,&nextSize,&nextEvent,&nexttype,&crc1,&crc2)) {
-                       // CkAbort("CkMessageReplay> Syntax error reading replay file");
+                       CkAbort("CkMessageReplay> Syntax error reading replay file");
                        nextPE=nextSize=nextEvent=nexttype=-1; //No destructor->record file just ends in the middle!
                }
+               */
                counter++;
        }
        /// If this is the next message we need, advance and return CmiTrue.
@@ -2003,6 +2022,9 @@ private:
                        return CmiFalse;
                }
        }
+       virtual int process(CthThreadToken *token, CkCoreState *ck) {
+         return 1;
+       }
 };
 
 class CkMessageDetailReplay : public CkMessageWatcher {