diff --git a/config/opal_check_pmi.m4 b/config/opal_check_pmi.m4 index e74574607b..345115ad32 100644 --- a/config/opal_check_pmi.m4 +++ b/config/opal_check_pmi.m4 @@ -375,7 +375,7 @@ AC_DEFUN([OPAL_CHECK_PMIX],[ #endif ], [])], [AC_MSG_RESULT([found]) - opal_external_pmix_version=1.2.x + opal_external_pmix_version=1x opal_external_pmix_version_found=1 opal_external_have_pmix1=1 opal_external_pmix_happy=yes], @@ -402,6 +402,15 @@ AC_DEFUN([OPAL_CHECK_PMIX],[ AC_MSG_WARN([header/library files were not found]) AC_MSG_ERROR([Cannot continue])]) + # Final check - if they didn't point us explicitly at an external version + # but we found one anyway, use the internal version if it is higher + AS_IF([test "$opal_external_pmix_version" != "internal" && (test -z "$with_pmix" || test "$with_pmix" = "yes")], + [AS_IF([test "$opal_external_pmix_version" != "3x"], + [AC_MSG_WARN([discovered external PMIx version is less than internal version 3.x]) + AC_MSG_WARN([using internal PMIx]) + opal_external_pmix_version=internal + opal_external_pmix_happy=no])]) + AC_MSG_CHECKING([PMIx version to be used]) AS_IF([test "$opal_external_pmix_happy" = "yes"], [AC_MSG_RESULT([external($opal_external_pmix_version)]) @@ -415,8 +424,8 @@ AC_DEFUN([OPAL_CHECK_PMIX],[ [Whether the external PMIx library is v1]) AM_CONDITIONAL([OPAL_WANT_PRUN], [test "$opal_prun_happy" = "yes"]) - AS_IF([test "$opal_external_pmix_version" = "1.2.x"], - [OPAL_SUMMARY_ADD([[Miscellaneous]],[[PMIx support]], [opal_pmix], [$opal_external_pmix_version: WARNING - DYNAMIC OPS NOT SUPPORTED])], + AS_IF([test "$opal_external_pmix_version" = "1x"], + [OPAL_SUMMARY_ADD([[Miscellaneous]],[[PMIx support]], [opal_pmix], [1.2.x: WARNING - DYNAMIC OPS NOT SUPPORTED])], [OPAL_SUMMARY_ADD([[Miscellaneous]],[[PMIx support]], [opal_pmix], [$opal_external_pmix_version])]) OPAL_VAR_SCOPE_POP diff --git a/opal/mca/pmix/ext1x/configure.m4 b/opal/mca/pmix/ext1x/configure.m4 index 16bbf2a502..abbca782ea 100644 --- a/opal/mca/pmix/ext1x/configure.m4 +++ b/opal/mca/pmix/ext1x/configure.m4 @@ -33,9 +33,7 @@ AC_DEFUN([MCA_opal_pmix_ext1x_CONFIG],[ AS_IF([test "$opal_external_pmix_happy" = "yes"], [ # check for the 1.x version ( >= 1.1.4 ?) AC_MSG_CHECKING([if external component is version 1.x]) - AS_IF([test "$opal_external_pmix_version" = "11" || - test "$opal_external_pmix_version" = "12" || - test "$opal_external_pmix_version" = "1x"], + AS_IF([test "$opal_external_pmix_version" = "1x"], [AC_MSG_RESULT([yes]) AS_IF([test "$opal_event_external_support" != "yes"], [AC_MSG_WARN([EXTERNAL PMIX SUPPORT REQUIRES USE OF EXTERNAL LIBEVENT]) diff --git a/orte/orted/pmix/pmix_server_gen.c b/orte/orted/pmix/pmix_server_gen.c index 8993a6cdf0..2c9d7326fb 100644 --- a/orte/orted/pmix/pmix_server_gen.c +++ b/orte/orted/pmix/pmix_server_gen.c @@ -356,6 +356,17 @@ void pmix_server_notify(int status, orte_process_name_t* sender, } } + /* protect against infinite loops by marking that this notification was + * passed down to the server by me */ + if (NULL == cd->info) { + cd->info = OBJ_NEW(opal_list_t); + } + val = OBJ_NEW(opal_value_t); + val->key = strdup("orte.notify.donotloop"); + val->type = OPAL_BOOL; + val->data.flag = true; + opal_list_append(cd->info, &val->super); + opal_output_verbose(2, orte_pmix_server_globals.output, "%s NOTIFYING PMIX SERVER OF STATUS %d", ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), ret); @@ -382,6 +393,14 @@ int pmix_server_notify_event(int code, opal_process_name_t *source, ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), ORTE_NAME_PRINT(source), code); + /* check to see if this is one we sent down */ + OPAL_LIST_FOREACH(val, info, opal_value_t) { + if (0 == strcmp(val->key, "orte.notify.donotloop")) { + /* yep - do not process */ + goto done; + } + } + /* a local process has generated an event - we need to xcast it * to all the daemons so it can be passed down to their local * procs */ @@ -448,6 +467,7 @@ int pmix_server_notify_event(int code, opal_process_name_t *source, /* maintain accounting */ OBJ_RELEASE(sig); + done: /* execute the callback */ if (NULL != cbfunc) { cbfunc(ORTE_SUCCESS, cbdata);