coll/base: fix error reporting
and silence CID 1271639
Этот коммит содержится в:
родитель
455b465329
Коммит
ce2020d255
@ -9,7 +9,7 @@
|
|||||||
* University of Stuttgart. All rights reserved.
|
* University of Stuttgart. All rights reserved.
|
||||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* 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.
|
* and Technology (RIST). All rights reserved.
|
||||||
* $COPYRIGHT$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
@ -64,6 +64,24 @@ int ompi_coll_base_sendrecv_nonzero_actual( void* sendbuf, size_t scount,
|
|||||||
|
|
||||||
if (0 != nreqs) {
|
if (0 != nreqs) {
|
||||||
err = ompi_request_wait_all( nreqs, reqs, statuses );
|
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 (err != MPI_SUCCESS) { line = __LINE__; goto error_handler; }
|
||||||
|
|
||||||
if (MPI_STATUS_IGNORE != status) {
|
if (MPI_STATUS_IGNORE != status) {
|
||||||
@ -77,32 +95,13 @@ int ompi_coll_base_sendrecv_nonzero_actual( void* sendbuf, size_t scount,
|
|||||||
return (MPI_SUCCESS);
|
return (MPI_SUCCESS);
|
||||||
|
|
||||||
error_handler:
|
error_handler:
|
||||||
/* As we use wait_all we will get MPI_ERR_IN_STATUS which is not an error
|
/* Error discovered during the posting of the irecv or isend,
|
||||||
* code that we can propagate up the stack. Instead, look for the real
|
* and no status is available.
|
||||||
* error code from the MPI_ERROR in the status.
|
|
||||||
*/
|
*/
|
||||||
if( MPI_ERR_IN_STATUS == err ) {
|
OPAL_OUTPUT ((ompi_coll_base_framework.framework_output, "%s:%d: Error %d occurred\n",
|
||||||
/* At least we know the error was detected during the wait_all */
|
__FILE__, line, err));
|
||||||
int err_index = 1;
|
if (MPI_STATUS_IGNORE != status) {
|
||||||
if( MPI_SUCCESS == statuses[0].MPI_ERROR ) {
|
status->MPI_ERROR = err;
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return (err);
|
return (err);
|
||||||
}
|
}
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user