1
1

Ensure that we completely register an nspace prior to launching local procs as otherwise we may attempt to send it down before it is registered, leading to data corruption

Этот коммит содержится в:
Ralph Castain 2015-11-05 20:51:56 -08:00
родитель fda5daf453
Коммит ec0cc4bf21

Просмотреть файл

@ -42,15 +42,22 @@
#include "orte/util/name_fns.h"
#include "orte/runtime/orte_globals.h"
#include "orte/runtime/orte_wait.h"
#include "orte/mca/errmgr/errmgr.h"
#include "orte/mca/rmaps/rmaps_types.h"
#include "pmix_server_internal.h"
#include "pmix_server.h"
typedef struct {
volatile bool active;
opal_list_t *info;
} myxfer_t;
static void opcbfunc(int status, void *cbdata)
{
opal_list_t *lt = (opal_list_t*)cbdata;
myxfer_t *p = (myxfer_t*)cbdata;
opal_list_t *lt = p->info;
opal_value_t *k1, *k2;
opal_list_t *pmap;
@ -65,6 +72,7 @@ static void opcbfunc(int status, void *cbdata)
}
OBJ_RELEASE(lt);
}
p->active = false;
}
/* stuff proc attributes for sending back to a proc */
@ -83,6 +91,7 @@ int orte_pmix_server_register_nspace(orte_job_t *jdata)
orte_app_context_t *app;
uid_t uid;
gid_t gid;
myxfer_t *p;
opal_output_verbose(2, orte_pmix_server_globals.output,
"%s register nspace for %s",
@ -406,11 +415,17 @@ int orte_pmix_server_register_nspace(orte_job_t *jdata)
orte_set_attribute(&jdata->attributes, ORTE_JOB_NSPACE_REGISTERED, ORTE_ATTR_LOCAL, NULL, OPAL_BOOL);
/* pass it down */
p = (myxfer_t*)malloc(sizeof(myxfer_t));
p->active = true;
p->info = info;
if (OPAL_SUCCESS != opal_pmix.server_register_nspace(jdata->jobid,
jdata->num_local_procs,
info, opcbfunc, (void*)info)) {
rc = ORTE_ERROR;
info, opcbfunc, (void*)p)) {
OPAL_LIST_RELEASE(info);
return ORTE_ERROR;
}
ORTE_WAIT_FOR_COMPLETION(p->active);
free(p);
return rc;
return ORTE_SUCCESS;
}