Prevent a segfault when accessing a rank outside a communicator.
This is not fixing any issue, it is simply preventing a sefault if the communicator creation has not happened as expected. Thus, this code path should never really be hit in a correct MPI application with a valid communicator creation support. Signed-off-by: George Bosilca <bosilca@icl.utk.edu>
Этот коммит содержится в:
родитель
3c1b33c93a
Коммит
6ea0c4eab9
@ -82,6 +82,16 @@ static inline mca_pml_ob1_comm_proc_t *mca_pml_ob1_peer_lookup (struct ompi_comm
|
|||||||
{
|
{
|
||||||
mca_pml_ob1_comm_t *pml_comm = (mca_pml_ob1_comm_t *)comm->c_pml_comm;
|
mca_pml_ob1_comm_t *pml_comm = (mca_pml_ob1_comm_t *)comm->c_pml_comm;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We have very few ways to validate the correct, and collective, creation of
|
||||||
|
* the communicator, and ensure all processes have the same cid. The least we
|
||||||
|
* can do is to check that we are not using a rank that is outside the scope
|
||||||
|
* of the communicator.
|
||||||
|
*/
|
||||||
|
if( OPAL_UNLIKELY(rank >= (int)pml_comm->num_procs) ) {
|
||||||
|
ompi_rte_abort(-1, "PML OB1 received a message from a rank outside the"
|
||||||
|
" valid range of the communicator. Please submit a bug request!");
|
||||||
|
}
|
||||||
if (OPAL_UNLIKELY(NULL == pml_comm->procs[rank])) {
|
if (OPAL_UNLIKELY(NULL == pml_comm->procs[rank])) {
|
||||||
OPAL_THREAD_LOCK(&pml_comm->proc_lock);
|
OPAL_THREAD_LOCK(&pml_comm->proc_lock);
|
||||||
if (NULL == pml_comm->procs[rank]) {
|
if (NULL == pml_comm->procs[rank]) {
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user