Fix the way arguments are being handled
authorNikhil Jain <nikhil@illinois.edu>
Fri, 29 Mar 2013 01:52:34 +0000 (20:52 -0500)
committerXiang Ni <xiangni2@c558-002.stampede.tacc.utexas.edu>
Fri, 29 Mar 2013 01:52:34 +0000 (20:52 -0500)
src/arch/mpi/machine.c
src/conv-core/convcore.c

index e6c19ece5309e8351988bc5646e48ccaf19aa58a..a2f0f1ab83dfb15bfb57bb8d3b3db93c45d8c850 100644 (file)
@@ -1394,13 +1394,15 @@ void LrtsInit(int *argc, char ***argv, int *numNodes, int *myNodeID) {
 
     if (*myNodeID >= num_workpes) {    /* is spare processor */
       //if isomalloc_sync call mpi_barrier
 
     if (*myNodeID >= num_workpes) {    /* is spare processor */
       //if isomalloc_sync call mpi_barrier
-      if(CmiGetArgFlag(largv,"+isomalloc_sync")){
+      char **tempargv = CmiCopyArgs(largv);
+      if(CmiGetArgFlag(tempargv,"+isomalloc_sync")){
           MPI_Barrier(charmComm);
           MPI_Barrier(charmComm);
           MPI_Barrier(charmComm);
           MPI_Barrier(charmComm);
       }
           MPI_Barrier(charmComm);
           MPI_Barrier(charmComm);
           MPI_Barrier(charmComm);
           MPI_Barrier(charmComm);
       }
-         MPI_Status sts;
+      free(tempargv);
+      MPI_Status sts;
       int vals[2];
       MPI_Recv(vals,2,MPI_INT,MPI_ANY_SOURCE,FAIL_TAG, charmComm,&sts);
       int newpe = vals[0];
       int vals[2];
       MPI_Recv(vals,2,MPI_INT,MPI_ANY_SOURCE,FAIL_TAG, charmComm,&sts);
       int newpe = vals[0];
index 6f420f4ac8f424ade87b8a78af5296856d300a22..ccc86770b0dfabc3d57578ead4b7d48ead514f35 100644 (file)
@@ -348,7 +348,7 @@ char **CmiCopyArgs(char **argv)
        int argc=CmiGetArgc(argv);
        char **ret=(char **)malloc(sizeof(char *)*(argc+1));
        int i;
        int argc=CmiGetArgc(argv);
        char **ret=(char **)malloc(sizeof(char *)*(argc+1));
        int i;
-       for (i=0;i<argc;i++) {
+       for (i=0;i<=argc;i++) {
        //      printf("Copyin argc %d/%d of lenght %d %s\n",i,argc,strlen(argv[i]), argv[i]);
        //      ret[i] = (char*)malloc(strlen(argv[i])*sizeof(char));
        //      memcpy(ret[i],argv[i],strlen(argv[i])*sizeof(char)); 
        //      printf("Copyin argc %d/%d of lenght %d %s\n",i,argc,strlen(argv[i]), argv[i]);
        //      ret[i] = (char*)malloc(strlen(argv[i])*sizeof(char));
        //      memcpy(ret[i],argv[i],strlen(argv[i])*sizeof(char));