Skip to content

Commit 9c4f56b

Browse files
committed
Fix the coll_base_sendrecv function.
1 parent 98a2f52 commit 9c4f56b

File tree

1 file changed

+16
-25
lines changed

1 file changed

+16
-25
lines changed

ompi/mca/coll/base/coll_base_barrier.c

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -46,44 +46,35 @@ ompi_coll_base_sendrecv_zero( int dest, int stag,
4646
MPI_Comm comm )
4747

4848
{
49-
int err, rc, line = 0;
50-
ompi_request_t *req;
49+
int rc, line = 0;
50+
ompi_request_t *req = MPI_REQUEST_NULL;
5151
ompi_status_public_t status;
5252

5353
/* post new irecv */
54-
err = MCA_PML_CALL(irecv( NULL, 0, MPI_BYTE, source, rtag,
55-
comm, &req ));
56-
if (err != MPI_SUCCESS) { line = __LINE__; goto error_handler; }
54+
rc = MCA_PML_CALL(irecv( NULL, 0, MPI_BYTE, source, rtag,
55+
comm, &req ));
56+
if( MPI_SUCCESS != rc ) { line = __LINE__; goto error_handler; }
5757

5858
/* send data to children */
5959
rc = MCA_PML_CALL(send( NULL, 0, MPI_BYTE, dest, stag,
6060
MCA_PML_BASE_SEND_STANDARD, comm ));
61-
if (rc != MPI_SUCCESS) { line = __LINE__; err = rc; goto error_handler; }
62-
63-
err = ompi_request_wait( &req, &status );
64-
if( MPI_ERR_IN_STATUS == err ) { line = __LINE__;
65-
/* As we use wait_all we will get MPI_ERR_IN_STATUS which is not an error
66-
* code that we can propagate up the stack. Instead, look for the real
67-
* error code from the MPI_ERROR in the status.
68-
*/
69-
err = status.MPI_ERROR;
70-
OPAL_OUTPUT ((ompi_coll_base_framework.framework_output, "%s:%d: Error %d occurred in the receive"
71-
" stage of ompi_coll_base_sendrecv_zero\n",
72-
__FILE__, line, err));
73-
return err;
74-
}
75-
if (err != MPI_SUCCESS) { line = __LINE__; goto error_handler; }
61+
if( MPI_SUCCESS != rc ) { line = __LINE__; goto error_handler; }
62+
63+
rc = ompi_request_wait( &req, &status );
64+
if( MPI_SUCCESS != rc ) { line = __LINE__; goto error_handler; }
7665

7766
return (MPI_SUCCESS);
7867

7968
error_handler:
80-
/* Error discovered during the posting of the irecv or isend,
81-
* and no status is available.
82-
*/
69+
if( MPI_REQUEST_NULL != req ) { /* cancel and complete the receive request */
70+
(void)ompi_request_cancel(req);
71+
(void)ompi_request_wait(&req, &status);
72+
}
73+
8374
OPAL_OUTPUT ((ompi_coll_base_framework.framework_output, "%s:%d: Error %d occurred\n",
84-
__FILE__, line, err));
75+
__FILE__, line, rc));
8576
(void)line; // silence compiler warning
86-
return err;
77+
return rc;
8778
}
8879

8980
/*

0 commit comments

Comments
 (0)