diff --git a/ompi/mca/coll/base/coll_base_util.c b/ompi/mca/coll/base/coll_base_util.c index 34607067e8..226457185b 100644 --- a/ompi/mca/coll/base/coll_base_util.c +++ b/ompi/mca/coll/base/coll_base_util.c @@ -9,7 +9,7 @@ * University of Stuttgart. All rights reserved. * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. - * Copyright (c) 2014 Research Organization for Information Science + * Copyright (c) 2014-2015 Research Organization for Information Science * and Technology (RIST). All rights reserved. * $COPYRIGHT$ * @@ -64,6 +64,24 @@ int ompi_coll_base_sendrecv_nonzero_actual( void* sendbuf, size_t scount, if (0 != nreqs) { err = ompi_request_wait_all( nreqs, reqs, statuses ); + if( MPI_ERR_IN_STATUS == err ) { + /* As we use wait_all we will get MPI_ERR_IN_STATUS which is not an error + * code that we can propagate up the stack. Instead, look for the real + * error code from the MPI_ERROR in the status. + */ + int err_index = 0; + if( MPI_SUCCESS == statuses[0].MPI_ERROR ) { + err_index = 1; + } + if (MPI_STATUS_IGNORE != status) { + *status = statuses[err_index]; + } + err = statuses[err_index].MPI_ERROR; + OPAL_OUTPUT ((ompi_coll_base_framework.framework_output, "%s:%d: Error %d occurred in the %s" + " stage of ompi_coll_base_sendrecv_zero\n", + __FILE__, line, err, (0 == err_index ? "receive" : "send"))); + return err; + } if (err != MPI_SUCCESS) { line = __LINE__; goto error_handler; } if (MPI_STATUS_IGNORE != status) { @@ -77,32 +95,13 @@ int ompi_coll_base_sendrecv_nonzero_actual( void* sendbuf, size_t scount, return (MPI_SUCCESS); error_handler: - /* As we use wait_all we will get MPI_ERR_IN_STATUS which is not an error - * code that we can propagate up the stack. Instead, look for the real - * error code from the MPI_ERROR in the status. + /* Error discovered during the posting of the irecv or isend, + * and no status is available. */ - if( MPI_ERR_IN_STATUS == err ) { - /* At least we know the error was detected during the wait_all */ - int err_index = 1; - if( MPI_SUCCESS == statuses[0].MPI_ERROR ) { - err_index = 0; - } - if (MPI_STATUS_IGNORE != status) { - *status = statuses[err_index]; - } - err = statuses[err_index].MPI_ERROR; - OPAL_OUTPUT ((ompi_coll_base_framework.framework_output, "%s:%d: Error %d occurred in the %s" - " stage of ompi_coll_base_sendrecv_zero\n", - __FILE__, line, err, (0 == err_index ? "receive" : "send"))); - } else { - /* Error discovered during the posting of the irecv or isend, - * and no status is available. - */ - OPAL_OUTPUT ((ompi_coll_base_framework.framework_output, "%s:%d: Error %d occurred\n", - __FILE__, line, err)); - if (MPI_STATUS_IGNORE != status) { - status->MPI_ERROR = err; - } + OPAL_OUTPUT ((ompi_coll_base_framework.framework_output, "%s:%d: Error %d occurred\n", + __FILE__, line, err)); + if (MPI_STATUS_IGNORE != status) { + status->MPI_ERROR = err; } return (err); }