static pmix_status_t _fencenb_fn(const pmix_proc_t procs_v2[], size_t nprocs, const pmix_info_t info[], size_t ninfo, char *data, size_t ndata, pmix_modex_cbfunc_t cbfunc, void *cbdata) { PMIXP_DEBUG("called"); pmixp_coll_t *coll; pmixp_coll_type_t type = PMIXP_COLL_TYPE_FENCE; pmix_status_t status = PMIX_SUCCESS; int ret; size_t i; pmixp_proc_t *procs = xmalloc(sizeof(*procs) * nprocs); for (i = 0; i < nprocs; i++) { procs[i].rank = procs_v2[i].rank; strncpy(procs[i].nspace, procs_v2[i].nspace, PMIXP_MAX_NSLEN); } coll = pmixp_state_coll_get(type, procs, nprocs); ret = pmixp_coll_contrib_local(coll, data, ndata, cbfunc, cbdata); xfree(procs); if (SLURM_SUCCESS != ret) { status = PMIX_ERROR; goto error; } return PMIX_SUCCESS; error: cbfunc(status, NULL, 0, cbdata, NULL, NULL); return status; }
static int _pmixp_server_cperf_iter(char *data, int ndata) { pmixp_coll_t *coll; pmixp_proc_t procs; int cur_count = _pmixp_server_cperf_count(); strncpy(procs.nspace, pmixp_info_namespace(), PMIXP_MAX_NSLEN); procs.rank = pmixp_lib_get_wildcard(); coll = pmixp_state_coll_get(PMIXP_COLL_TYPE_FENCE, &procs, 1); xassert(!pmixp_coll_contrib_local(coll, data, ndata, _pmixp_cperf_cbfunc, NULL)); while (cur_count == _pmixp_server_cperf_count()) { usleep(1); } return 0; }
pmix_status_t 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) { PMIXP_DEBUG("called"); pmixp_coll_t *coll; pmixp_coll_type_t type = PMIXP_COLL_TYPE_FENCE; pmix_status_t status = PMIX_SUCCESS; pmixp_debug_hang(0); coll = pmixp_state_coll_get(type, procs, nprocs); pmixp_coll_set_callback(coll, cbfunc, cbdata); if (SLURM_SUCCESS != pmixp_coll_contrib_local(coll, data, ndata)) { goto error; } return PMIX_SUCCESS; error: cbfunc(status, NULL, 0, cbdata, NULL, NULL); return status; }