Bug fix when using MPI_POST_RECV and MPI_Irecv together
authorChao Mei <chaomei2@illinois.edu>
Fri, 6 Apr 2012 05:01:28 +0000 (00:01 -0500)
committerChao Mei <chaomei2@illinois.edu>
Fri, 6 Apr 2012 05:01:28 +0000 (00:01 -0500)
src/arch/mpi/machine.c

index d6127d3c871eb2a9b6d7310635550c3a0358d323..7c01a83e7fb71313db59ca617a64c601b8aa488d 100644 (file)
@@ -702,12 +702,14 @@ static int PumpMsgs(void) {
             else {
                 START_EVENT();
                 IRecvList one = irecvListEntryAllocate();
             else {
                 START_EVENT();
                 IRecvList one = irecvListEntryAllocate();
-                if(MPI_SUCCESS != MPI_Irecv(msg, nbytes, MPI_BYTE, sts.MPI_SOURCE, sts.MPI_TAG, charmComm, &(one->req)));
+                if(MPI_SUCCESS != MPI_Irecv(msg, nbytes, MPI_BYTE, sts.MPI_SOURCE, sts.MPI_TAG, charmComm, &(one->req)))
                     CmiAbort("PumpMsgs: MPI_Irecv failed!\n");
                     CmiAbort("PumpMsgs: MPI_Irecv failed!\n");
+               /*printf("[%d]: irecv msg=%p, nbytes=%d, src=%d, tag=%d\n", CmiMyPe(), msg, nbytes, sts.MPI_SOURCE, sts.MPI_TAG);*/
                 one->msg = msg;
                 one->size = nbytes;
                 one->next = NULL;
                 waitIrecvListTail->next = one;
                 one->msg = msg;
                 one->size = nbytes;
                 one->next = NULL;
                 waitIrecvListTail->next = one;
+               waitIrecvListTail = one;
                 CONDITIONAL_TRACE_USER_EVENT(50); /* MPI_Irecv related user events */
             }
 #endif
                 CONDITIONAL_TRACE_USER_EVENT(50); /* MPI_Irecv related user events */
             }
 #endif