in the reduction handler, when count is 0, return the data immediately.
authorGengbin Zheng <gzheng@illinois.edu>
Mon, 12 Apr 2010 05:19:52 +0000 (00:19 -0500)
committerGengbin Zheng <gzheng@illinois.edu>
Mon, 12 Apr 2010 05:19:52 +0000 (00:19 -0500)
src/conv-core/cputopology.C

index 2591e356b9b69222d79c5e36a449c5ec8c7d8614..38ae576a02479b29be328b0c9479491842563719 100644 (file)
@@ -300,6 +300,7 @@ static void * combineMessage(int *size, void *data, void **remote, int count)
 {
   int i, j;
   int nprocs = ((hostnameMsg *)data)->n;
+  if (count == 0) return data;
   for (i=0; i<count; i++) nprocs += ((hostnameMsg *)remote[i])->n;
   *size = sizeof(hostnameMsg)+sizeof(_procInfo)*nprocs;
   hostnameMsg *msg = (hostnameMsg *)CmiAlloc(*size);
@@ -310,12 +311,12 @@ static void * combineMessage(int *size, void *data, void **remote, int count)
   int n=0;
   hostnameMsg *m = (hostnameMsg*)data;
   m->procs = (_procInfo*)((char*)m + sizeof(hostnameMsg));
-  for (int j=0; j<m->n; j++)
+  for (j=0; j<m->n; j++)
     msg->procs[n++] = m->procs[j];
   for (i=0; i<count; i++) {
-    hostnameMsg *m = (hostnameMsg*)remote[i];
+    m = (hostnameMsg*)remote[i];
     m->procs = (_procInfo*)((char*)m + sizeof(hostnameMsg));
-    for (int j=0; j<m->n; j++)
+    for (j=0; j<m->n; j++)
       msg->procs[n++] = m->procs[j];
   }
   return msg;