1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
/*
* Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
* Copyright (c) 2021 Nanook Consulting. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*
*/
#include "test_cd.h"
#include <time.h>
typedef struct {
int in_progress;
int status;
pmix_proc_t pname;
} cd_cbdata;
static void cd_cb(pmix_status_t status, void *cbdata)
{
cd_cbdata *cb = (cd_cbdata *) cbdata;
cb->status = status;
cb->in_progress = 0;
}
static void cnct_cb(pmix_status_t status, void *cbdata)
{
cd_cbdata *cb = (cd_cbdata *) cbdata;
cb->status = status;
cb->in_progress = 0;
}
int test_connect_disconnect(char *my_nspace, int my_rank)
{
int rc;
pmix_proc_t proc;
cd_cbdata cbdata;
pmix_strncpy(proc.nspace, my_nspace, PMIX_MAX_NSLEN);
proc.rank = PMIX_RANK_WILDCARD;
rc = PMIx_Connect(&proc, 1, NULL, 0);
if (PMIX_SUCCESS != rc) {
TEST_ERROR(("%s:%d: Connect blocking test failed.", my_nspace, my_rank));
exit(PMIX_ERROR);
}
TEST_VERBOSE(("%s:%d: Connect blocking test succeeded", my_nspace, my_rank));
rc = PMIx_Disconnect(&proc, 1, NULL, 0);
if (PMIX_SUCCESS != rc) {
TEST_ERROR(("%s:%d: Disconnect blocking test failed.", my_nspace, my_rank));
exit(PMIX_ERROR);
}
TEST_VERBOSE(("%s:%d: Disconnect blocking test succeeded.", my_nspace, my_rank));
cbdata.in_progress = 1;
rc = PMIx_Connect_nb(&proc, 1, NULL, 0, cnct_cb, &cbdata);
if (PMIX_SUCCESS == rc) {
PMIX_WAIT_FOR_COMPLETION(cbdata.in_progress);
rc = cbdata.status;
}
if (PMIX_SUCCESS != rc) {
TEST_ERROR(("%s:%d: Connect non-blocking test failed.", my_nspace, my_rank));
exit(PMIX_ERROR);
}
TEST_VERBOSE(("%s:%d: Connect non-blocking test succeeded.", my_nspace, my_rank));
cbdata.in_progress = 1;
rc = PMIx_Disconnect_nb(&proc, 1, NULL, 0, cd_cb, &cbdata);
if (PMIX_SUCCESS == rc) {
PMIX_WAIT_FOR_COMPLETION(cbdata.in_progress);
rc = cbdata.status;
}
if (PMIX_SUCCESS != rc) {
TEST_ERROR(("%s:%d: Disconnect non-blocking test failed.", my_nspace, my_rank));
exit(PMIX_ERROR);
}
TEST_VERBOSE(("%s:%d: Disconnect non-blocking test succeeded.", my_nspace, my_rank));
return PMIX_SUCCESS;
}
|