Fixed a bug in CkReduce under bigsim
authorFilippo Gioachin <gioachin@uiuc.edu>
Mon, 5 Jul 2010 05:32:08 +0000 (00:32 -0500)
committerFilippo Gioachin <gioachin@uiuc.edu>
Mon, 5 Jul 2010 05:32:08 +0000 (00:32 -0500)
src/langs/bluegene/blue.C

index c614ad469a9aaa47e7c1a8ab7cc4948b7836f4b6..a2d11a341168d23d46731202bf0077398a6e27c7 100644 (file)
@@ -2249,6 +2249,11 @@ extern "C" void CkReduce(void *msg, int size, CmiReduceMergeFn mergeFn) {
       numLocal ++;
     }
   }
+  
+  /* Since the current message is passed is as "local" to the merge function,
+   * and it will not be nullified in the upcoming loop, make it NULL explicitely. */
+  ((workThreadInfo*)cta(threadinfo))->reduceMsg = NULL;
+  
   void **msgLocal = (void**)malloc(sizeof(void*)*(numLocal-1));
   for (int j=0; j<cva(numNodes); j++){
     for(int i=0;i<cva(bgMach).numWth;i++){
@@ -2261,7 +2266,7 @@ extern "C" void CkReduce(void *msg, int size, CmiReduceMergeFn mergeFn) {
   CmiAssert(count==numLocal-1);
   msg = mergeFn(&size, msg, msgLocal, numLocal-1);
   CmiReduce(msg, size, mergeFn);
-  CmiPrintf("Called CmiReduce %d\n",CmiMyPe());
+  //CmiPrintf("Called CmiReduce %d\n",CmiMyPe());
   for (int i=0; i<numLocal-1; ++i) CmiFree(msgLocal[i]);
   free(msgLocal);
 }