Ensure we don't enter into an infinite loop looking for the PML modex key if it isn't present. The PMI implementation will load ALL modex keys when the first key is queried, so the hash db component can safely return "not found" if a subsequent key isn't present. The PML modex_recv needs to assume everything is okay if the modex recv fails to return a value.
cmr:v1.7.3:reviewer=jladd:subject=Prevent infinite loop when PML modex not found This commit was SVN r29243.
Этот коммит содержится в:
родитель
008a2af2d8
Коммит
9aeba777fa
@ -345,10 +345,10 @@ mca_pml_base_pml_check_selected(const char *my_pml,
|
||||
procs[0],
|
||||
(void**) &remote_pml, &size);
|
||||
|
||||
/* if modex isn't implemented, then just assume all is well... */
|
||||
if (OMPI_ERR_NOT_IMPLEMENTED == ret) {
|
||||
/* if this key wasn't found, then just assume all is well... */
|
||||
if (OMPI_SUCCESS != ret) {
|
||||
opal_output_verbose( 10, ompi_pml_base_framework.framework_output,
|
||||
"check:select: modex not implemented");
|
||||
"check:select: modex data not found");
|
||||
return OMPI_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -337,8 +337,12 @@ static int fetch(const opal_identifier_t *uid,
|
||||
|
||||
/* find the value */
|
||||
if (NULL == (kv = lookup_keyval(proc_data, key))) {
|
||||
/* maybe they can find it elsewhere */
|
||||
return OPAL_ERR_TAKE_NEXT_OPTION;
|
||||
/* if the proc object was found, then all data
|
||||
* for that proc has been stored - if we didn't
|
||||
* find it, then report so. Otherwise, we can
|
||||
* enter an infinite loop of looking for it
|
||||
*/
|
||||
return OPAL_ERR_NOT_FOUND;
|
||||
}
|
||||
|
||||
/* do the copy and check the type */
|
||||
@ -429,8 +433,12 @@ static int fetch_pointer(const opal_identifier_t *uid,
|
||||
|
||||
/* find the value */
|
||||
if (NULL == (kv = lookup_keyval(proc_data, key))) {
|
||||
/* look elsewhere */
|
||||
return OPAL_ERR_TAKE_NEXT_OPTION;
|
||||
/* if the proc object was found, then all data
|
||||
* for that proc has been stored - if we didn't
|
||||
* find it, then report so. Otherwise, we can
|
||||
* enter an infinite loop of looking for it
|
||||
*/
|
||||
return OPAL_ERR_NOT_FOUND;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user