George, Thanks for your reply.
Yes, as you explained, a case specifying an inactive request for MPI_Test is OK. But the problem is a case specifying an inactive request for MPI_Wait, MPI_Waitall, and MPI_Testall, as I explained in my first mail. See code below: /* make a inactive request */ MPI_Recv_init(&buf, 1, MPI_INT, 1, 0, MPI_COMM_WORLD, &request); MPI_Start(&request); do { MPI_Test(&request, &completed, &status); } while (completed == 0); /* wait for an inactive request */ MPI_Wait(&request, &status); In this code, the ompi_request_t object is marked as inactive in MPI_Test (ompi_request_default_test) but its req_status field remains unchanged. Succeeding MPI_Wait (ompi_request_default_wait) sets a user-supplied status object using req_status field of the request in req_wait.c line 57. if( MPI_STATUS_IGNORE != status ) { status->MPI_TAG = req->req_status.MPI_TAG; status->MPI_SOURCE = req->req_status.MPI_SOURCE; status->_ucount = req->req_status._ucount; status->_cancelled = req->req_status._cancelled; } Thus, the user will see a non-empty status after MPI_Wait in the code above. You can see this phenomenon with my status.c attached in my first mail. Run with -n 2. To avoid this problem, we have two options. A. Set req_status field to empty when we mark a request as inactive, or B. Add if-statements for an inactive request in order to set a user-supplied status object to empty in ompi_request_default_wait etc. For least astonishment, I think A. is better. Regards, Takahiro Kawashima, MPI development team, Fujitsu > Takahiro, > > I fail to see the cases your patch addresses. I recognize I did not have the > time to look over all the instances where we deal with persistent inactive > requests, but at the first occurrence, the one in req_test.c line 68, the > case you exhibit there is already covered by the test "request->req_state == > OMPI_REQUEST_INACTIVE". I see similar checks in all the other test/wait > files. Basically, it doesn't matter that we leave the last returned error > code on an inactive request, as we always return MPI_STATUS_EMPTY in the > status for such requests. > > Thanks, > george. > > > On Oct 15, 2012, at 07:02 , "Kawashima, Takahiro" > <t-kawash...@jp.fujitsu.com> wrote: > > > Hi Open MPI developers, > > > > How is my updated patch? > > If there is an another concern, I'll try to update it. > > > >>>>> The bugs are: > >>>>> > >>>>> (1) MPI_SOURCE of MPI_Status for a null request must be MPI_ANY_SOURCE. > >>>>> > >>>>> (2) MPI_Status for an inactive request must be an empty status. > >>>>> > >>>>> (3) Possible BUS errors on sparc64 processors. > >>>>> > >>>>> r23554 fixed possible BUS errors on sparc64 processors. > >>>>> But the fix seems to be insufficient. > >>>>> > >>>>> We should use OMPI_STATUS_SET macro for all user-supplied > >>>>> MPI_Status objects. > >>>> Regarding #3, see also a trac 3218. I'm putting a fix back today. Sorry > >>>> for the delay. One proposed solution was extending the use of the > >>>> OMPI_STATUS_SET macros, but I think the consensus was to fix the problem > >>>> in the Fortran layer. Indeed, the Fortran layer already routinely > >>>> converts between Fortran and C statuses. The problem was that we started > >>>> introducing optimizations to bypass the Fortran-to-C conversion and that > >>>> optimization was employed too liberally (e..g, in situations that would > >>>> introduce the alignment errors you're describing). My patch will clean > >>>> that up. I'll try to put it back in the next few hours. > >>> > >>> Sorry, I didn't notice the ticket 3218. > >>> Now I've confirmed your commit r27403. > >>> Your modification is better for my issue (3). > >>> > >>> With r27403, my patch for issue (1) and (2) needs modification. > >>> I'll re-send modified patch in a few hours. > >> > >> The updated patch is attached. > >> This patch addresses bugs (1) and (2) in my previous mail > >> and fixes some typos in comments.