static pmix_status_t server_fencenb_fn(const pmix_proc_t procs[], size_t nprocs, const pmix_info_t info[], size_t ninfo, char *data, size_t ndata, pmix_modex_cbfunc_t cbfunc, void *cbdata) { pmix1_opalcaddy_t *opalcaddy; size_t n; opal_namelist_t *nm; opal_value_t *iptr; int rc; if (NULL == host_module || NULL == host_module->fence_nb) { return PMIX_ERR_NOT_SUPPORTED; } /* setup the caddy */ opalcaddy = OBJ_NEW(pmix1_opalcaddy_t); opalcaddy->mdxcbfunc = cbfunc; opalcaddy->cbdata = cbdata; /* convert the array of pmix_proc_t to the list of procs */ for (n=0; n < nprocs; n++) { nm = OBJ_NEW(opal_namelist_t); opal_list_append(&opalcaddy->procs, &nm->super); if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&nm->name.jobid, procs[n].nspace))) { OBJ_RELEASE(opalcaddy); return pmix1_convert_opalrc(rc); } if (PMIX_RANK_WILDCARD == procs[n].rank) { nm->name.vpid = OPAL_VPID_WILDCARD; } else { nm->name.vpid = procs[n].rank; } } /* convert the array of pmix_info_t to the list of info */ for (n=0; n < ninfo; n++) { iptr = OBJ_NEW(opal_value_t); opal_list_append(&opalcaddy->info, &iptr->super); iptr->key = strdup(info[n].key); if (OPAL_SUCCESS != (rc = pmix1_value_unload(iptr, &info[n].value))) { OBJ_RELEASE(opalcaddy); return pmix1_convert_opalrc(rc); } } /* pass it up */ rc = host_module->fence_nb(&opalcaddy->procs, &opalcaddy->info, data, ndata, opmdx_response, opalcaddy); if (OPAL_SUCCESS != rc) { OBJ_RELEASE(opalcaddy); } return pmix1_convert_opalrc(rc); }
static pmix_status_t server_dmodex_req_fn(const pmix_proc_t *p, const pmix_info_t info[], size_t ninfo, pmix_modex_cbfunc_t cbfunc, void *cbdata) { int rc; pmix1_opalcaddy_t *opalcaddy; opal_process_name_t proc; opal_value_t *iptr; size_t n; if (NULL == host_module || NULL == host_module->direct_modex) { return PMIX_ERR_NOT_SUPPORTED; } /* convert the nspace/rank to an opal_process_name_t */ if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { return pmix1_convert_opalrc(rc); } if (PMIX_RANK_WILDCARD == p->rank) { proc.vpid = OPAL_VPID_WILDCARD; } else { proc.vpid = p->rank; } /* setup the caddy */ opalcaddy = OBJ_NEW(pmix1_opalcaddy_t); opalcaddy->mdxcbfunc = cbfunc; opalcaddy->cbdata = cbdata; /* convert the array of pmix_info_t to the list of info */ for (n=0; n < ninfo; n++) { iptr = OBJ_NEW(opal_value_t); opal_list_append(&opalcaddy->info, &iptr->super); iptr->key = strdup(info[n].key); if (OPAL_SUCCESS != (rc = pmix1_value_unload(iptr, &info[n].value))) { OBJ_RELEASE(opalcaddy); return pmix1_convert_opalrc(rc); } } /* pass it up */ rc = host_module->direct_modex(&proc, &opalcaddy->info, opmdx_response, opalcaddy); if (OPAL_SUCCESS != rc && OPAL_ERR_IN_PROCESS != rc) { OBJ_RELEASE(opalcaddy); } if (OPAL_ERR_IN_PROCESS == rc) { rc = OPAL_SUCCESS; } return pmix1_convert_opalrc(rc); }
static pmix_status_t server_publish_fn(const pmix_proc_t *p, const pmix_info_t info[], size_t ninfo, pmix_op_cbfunc_t cbfunc, void *cbdata) { int rc; size_t n; pmix1_opalcaddy_t *opalcaddy; opal_process_name_t proc; opal_value_t *oinfo; if (NULL == host_module || NULL == host_module->publish) { return PMIX_ERR_NOT_SUPPORTED; } /* convert the nspace/rank to an opal_process_name_t */ if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&proc.jobid, p->nspace))) { return pmix1_convert_opalrc(rc); } if (PMIX_RANK_WILDCARD == p->rank) { proc.vpid = OPAL_VPID_WILDCARD; } else { proc.vpid = p->rank; } /* setup the caddy */ opalcaddy = OBJ_NEW(pmix1_opalcaddy_t); opalcaddy->opcbfunc = cbfunc; opalcaddy->cbdata = cbdata; /* convert the info array */ for (n=0; n < ninfo; n++) { oinfo = OBJ_NEW(opal_value_t); opal_list_append(&opalcaddy->info, &oinfo->super); oinfo->key = strdup(info[n].key); if (OPAL_SUCCESS != (rc = pmix1_value_unload(oinfo, &info[n].value))) { OBJ_RELEASE(opalcaddy); return pmix1_convert_opalrc(rc); } } /* pass it up */ rc = host_module->publish(&proc, &opalcaddy->info, opal_opcbfunc, opalcaddy); if (OPAL_SUCCESS != rc) { OBJ_RELEASE(opalcaddy); } return pmix1_convert_opalrc(rc); }
static void myerr(pmix_status_t status, pmix_proc_t procs[], size_t nprocs, pmix_info_t info[], size_t ninfo) { int rc; opal_list_t plist, ilist; opal_namelist_t *nm; opal_value_t *iptr; volatile int cond = 1; size_t n; /* convert the incoming status */ rc = pmix1_convert_rc(status); /* convert the array of procs */ OBJ_CONSTRUCT(&plist, opal_list_t); for (n=0; n < nprocs; n++) { nm = OBJ_NEW(opal_namelist_t); nm->name.jobid = strtoul(procs[n].nspace, NULL, 10); nm->name.vpid = procs[n].rank; opal_list_append(&plist, &nm->super); } /* convert the array of info */ OBJ_CONSTRUCT(&ilist, opal_list_t); for (n=0; n < ninfo; n++) { iptr = OBJ_NEW(opal_value_t); iptr->key = strdup(info[n].key); pmix1_value_unload(iptr, &info[n].value); opal_list_append(&plist, &iptr->super); } /* call the base errhandler */ opal_pmix_base_errhandler(rc, &plist, &ilist, completion_handler, (void *)&cond); PMIX_WAIT_FOR_COMPLETION(cond); OPAL_LIST_DESTRUCT(&plist); OPAL_LIST_DESTRUCT(&ilist); }