Fix the issue reported by Gilles Gouaillardet regarding the
MPI_PROC_NULL persistent requests. This commit was SVN r31524.
Этот коммит содержится в:
родитель
52f519dacb
Коммит
17b3c7e906
@ -54,6 +54,14 @@ int MPI_Start(MPI_Request *request)
|
|||||||
}
|
}
|
||||||
OMPI_ERRHANDLER_CHECK(rc, MPI_COMM_WORLD, rc, FUNC_NAME);
|
OMPI_ERRHANDLER_CHECK(rc, MPI_COMM_WORLD, rc, FUNC_NAME);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Per definition of the handling of persistent request in the
|
||||||
|
* MPI standard 3.1 page 78 line 19: we must have the following
|
||||||
|
* sequence CREATE (START COMPLETE)* FREE. The upper level is
|
||||||
|
* responsible for handling any concurency. The PML must handle
|
||||||
|
* this case, as it is the only one knowing if the request can
|
||||||
|
* be reused or not (it is PML completed or not?).
|
||||||
|
*/
|
||||||
|
|
||||||
switch((*request)->req_type) {
|
switch((*request)->req_type) {
|
||||||
case OMPI_REQUEST_PML:
|
case OMPI_REQUEST_PML:
|
||||||
@ -63,11 +71,18 @@ int MPI_Start(MPI_Request *request)
|
|||||||
|
|
||||||
OPAL_CR_EXIT_LIBRARY();
|
OPAL_CR_EXIT_LIBRARY();
|
||||||
return ret;
|
return ret;
|
||||||
break;
|
|
||||||
|
|
||||||
case OMPI_REQUEST_NOOP:
|
case OMPI_REQUEST_NOOP:
|
||||||
|
/**
|
||||||
|
* We deal with a MPI_PROC_NULL request. If the request is
|
||||||
|
* already active, fall back to the error case in the default.
|
||||||
|
* Otherwise, mark it active so we can correctly handle it in
|
||||||
|
* the wait*.
|
||||||
|
*/
|
||||||
|
if( OMPI_REQUEST_INACTIVE == (*request)->req_state ) {
|
||||||
|
(*request)->req_state = OMPI_REQUEST_ACTIVE;
|
||||||
return MPI_SUCCESS;
|
return MPI_SUCCESS;
|
||||||
break;
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_REQUEST, FUNC_NAME);
|
return OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_REQUEST, FUNC_NAME);
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user