static void wait_cbfunc(struct pmix_peer_t *pr, pmix_usock_hdr_t *hdr, pmix_buffer_t *buf, void *cbdata) { pmix_cb_t *cb = (pmix_cb_t*)cbdata; pmix_status_t rc; pmix_status_t ret; int32_t cnt; char *nspace; pmix_buffer_t *bptr; pmix_output_verbose(2, pmix_globals.debug_output, "pmix:client recv callback activated with %d bytes", (NULL == buf) ? -1 : (int)buf->bytes_used); /* unpack the returned status */ cnt = 1; if (PMIX_SUCCESS != (rc = pmix_bfrop.unpack(buf, &ret, &cnt, PMIX_INT))) { PMIX_ERROR_LOG(rc); ret = rc; } /* connect has to also pass back data from all nspace's involved in * the operation, including our own. Each will come as a buffer */ cnt = 1; while (PMIX_SUCCESS == (rc = pmix_bfrop.unpack(buf, &bptr, &cnt, PMIX_BUFFER))) { /* unpack the nspace for this blob */ cnt = 1; if (PMIX_SUCCESS != (rc = pmix_bfrop.unpack(bptr, &nspace, &cnt, PMIX_STRING))) { PMIX_ERROR_LOG(rc); PMIX_RELEASE(bptr); continue; } /* extract and process any proc-related info for this nspace */ pmix_client_process_nspace_blob(nspace, bptr); PMIX_RELEASE(bptr); } if (PMIX_ERR_UNPACK_READ_PAST_END_OF_BUFFER != rc) { PMIX_ERROR_LOG(rc); ret = rc; } if (NULL != cb->op_cbfunc) { cb->op_cbfunc(ret, cb->cbdata); } }
/* callback for wait completion */ static void wait_cbfunc(struct pmix_peer_t *pr, pmix_usock_hdr_t *hdr, pmix_buffer_t *buf, void *cbdata) { pmix_cb_t *cb = (pmix_cb_t*)cbdata; char nspace[PMIX_MAX_NSLEN+1]; char *n2; pmix_status_t rc, ret; int32_t cnt; pmix_output_verbose(2, pmix_globals.debug_output, "pmix:client recv callback activated with %d bytes", (NULL == buf) ? -1 : (int)buf->bytes_used); /* init */ memset(nspace, 0, PMIX_MAX_NSLEN+1); /* unpack the returned status */ cnt = 1; if (PMIX_SUCCESS != (rc = pmix_bfrop.unpack(buf, &ret, &cnt, PMIX_STATUS))) { PMIX_ERROR_LOG(rc); ret = rc; } if (PMIX_SUCCESS == ret) { /* unpack the namespace */ cnt = 1; if (PMIX_SUCCESS != (rc = pmix_bfrop.unpack(buf, &n2, &cnt, PMIX_STRING))) { PMIX_ERROR_LOG(rc); ret = rc; } if (NULL != n2) { (void)strncpy(nspace, n2, PMIX_MAX_NSLEN); /* extract and process any proc-related info for this nspace */ pmix_client_process_nspace_blob(nspace, buf); free(n2); } } if (NULL != cb->spawn_cbfunc) { cb->spawn_cbfunc(ret, nspace, cb->cbdata); } }