diff --git a/opal/mca/pmix/pmix2x/pmix2x.c b/opal/mca/pmix/pmix2x/pmix2x.c index ff70ca4dec..4c7b01b6e4 100644 --- a/opal/mca/pmix/pmix2x/pmix2x.c +++ b/opal/mca/pmix/pmix2x/pmix2x.c @@ -219,10 +219,12 @@ static void _event_hdlr(int sd, short args, void *cbdata) opal_output_verbose(2, opal_pmix_base_framework.framework_output, "%s _EVENT_HDLR CALLING EVHDLR", OPAL_NAME_PRINT(OPAL_PROC_MY_NAME)); - event->handler(cd->status, &cd->pname, - cd->info, &cd->results, - return_local_event_hdlr, (void*)cd); - return; + if (NULL != event->handler) { + event->handler(cd->status, &cd->pname, + cd->info, &cd->results, + return_local_event_hdlr, (void*)cd); + return; + } } } /* if we didn't find a match, we still have to call their final callback */ diff --git a/orte/mca/odls/base/odls_base_default_fns.c b/orte/mca/odls/base/odls_base_default_fns.c index 5f7022b4c9..54f1b53e00 100644 --- a/orte/mca/odls/base/odls_base_default_fns.c +++ b/orte/mca/odls/base/odls_base_default_fns.c @@ -279,6 +279,7 @@ int orte_odls_base_default_construct_child_list(opal_buffer_t *buffer, int rc; orte_std_cntr_t cnt; orte_job_t *jdata=NULL, *daemons; + orte_node_t *node; int32_t n, k; opal_buffer_t *bptr; orte_proc_t *pptr, *dmn; @@ -436,7 +437,8 @@ int orte_odls_base_default_construct_child_list(opal_buffer_t *buffer, /* not ready for use yet */ continue; } - if (!orte_get_attribute(&jdata->attributes, ORTE_JOB_FULLY_DESCRIBED, NULL, OPAL_BOOL)) { + if (!ORTE_PROC_IS_HNP && + orte_get_attribute(&jdata->attributes, ORTE_JOB_FULLY_DESCRIBED, NULL, OPAL_BOOL)) { /* the parser will have already made the connection, but the fully described * case won't have done it, so connect the proc to its node here */ opal_output_verbose(5, orte_odls_base_framework.framework_output, @@ -457,6 +459,17 @@ int orte_odls_base_default_construct_child_list(opal_buffer_t *buffer, } OBJ_RETAIN(dmn->node); pptr->node = dmn->node; + /* add the node to the job map, if needed */ + if (!ORTE_FLAG_TEST(pptr->node, ORTE_NODE_FLAG_MAPPED)) { + OBJ_RETAIN(pptr->node); + opal_pointer_array_add(jdata->map->nodes, pptr->node); + jdata->map->num_nodes++; + ORTE_FLAG_SET(pptr->node, ORTE_NODE_FLAG_MAPPED); + } + /* add this proc to that node */ + OBJ_RETAIN(pptr); + opal_pointer_array_add(pptr->node->procs, pptr); + pptr->node->num_procs++; } /* see if it belongs to us */ if (pptr->parent == ORTE_PROC_MY_NAME->vpid) { @@ -485,6 +498,14 @@ int orte_odls_base_default_construct_child_list(opal_buffer_t *buffer, ORTE_FLAG_SET(app, ORTE_APP_FLAG_USED_ON_NODE); } } + if (orte_get_attribute(&jdata->attributes, ORTE_JOB_FULLY_DESCRIBED, NULL, OPAL_BOOL)) { + /* reset the mapped flags */ + for (n=0; n < jdata->map->nodes->size; n++) { + if (NULL != (node = (orte_node_t*)opal_pointer_array_get_item(jdata->map->nodes, n))) { + ORTE_FLAG_UNSET(node, ORTE_NODE_FLAG_MAPPED); + } + } + } if (!orte_get_attribute(&jdata->attributes, ORTE_JOB_FULLY_DESCRIBED, NULL, OPAL_BOOL)) { /* compute and save bindings of local children */