From a43fae74a5af40b95cf2853798a95f772b50475c Mon Sep 17 00:00:00 2001 From: Ralph Castain Date: Sat, 3 Dec 2016 10:11:19 -0800 Subject: [PATCH] Avoid hanging in show_help if PMIx was unable to initialize Signed-off-by: Ralph Castain --- opal/mca/pmix/ext2x/pmix2x.c | 22 ++++++++++++++-------- opal/mca/pmix/pmix2x/pmix2x.c | 23 +++++++++++++++-------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/opal/mca/pmix/ext2x/pmix2x.c b/opal/mca/pmix/ext2x/pmix2x.c index 4944e3a6ff..2b4a951211 100644 --- a/opal/mca/pmix/ext2x/pmix2x.c +++ b/opal/mca/pmix/ext2x/pmix2x.c @@ -1328,12 +1328,7 @@ static void pmix2x_log(opal_list_t *info, opal_value_t *ival; size_t n, ninfo; pmix2x_opcaddy_t *cd; - - /* bozo check */ - if (NULL == info || 0 == (ninfo = opal_list_get_size(info))) { - rc = OPAL_ERR_BAD_PARAM; - goto CLEANUP; - } + pmix_status_t prc; /* setup the operation */ cd = OBJ_NEW(pmix2x_opcaddy_t); @@ -1341,6 +1336,12 @@ static void pmix2x_log(opal_list_t *info, cd->cbdata = cbdata; cd->ninfo = ninfo; + /* bozo check */ + if (NULL == info || 0 == (ninfo = opal_list_get_size(info))) { + rc = OPAL_ERR_BAD_PARAM; + goto CLEANUP; + } + /* convert the list to an array of info objects */ PMIX_INFO_CREATE(cd->info, cd->ninfo); n=0; @@ -1351,14 +1352,19 @@ static void pmix2x_log(opal_list_t *info, } /* pass it down */ - PMIx_Log_nb(cd->info, cd->ninfo, NULL, 0, - opcbfunc, cd); + if (PMIX_SUCCESS != (prc = PMIx_Log_nb(cd->info, cd->ninfo, NULL, 0, + opcbfunc, cd))) { + /* do not hang! */ + rc = pmix2x_convert_rc(prc); + goto CLEANUP; + } return; CLEANUP: if (NULL != cbfunc) { cbfunc(rc, cbdata); } + OBJ_RELEASE(cd); } /**** INSTANTIATE INTERNAL CLASSES ****/ diff --git a/opal/mca/pmix/pmix2x/pmix2x.c b/opal/mca/pmix/pmix2x/pmix2x.c index 8856c96b82..489551d6b7 100644 --- a/opal/mca/pmix/pmix2x/pmix2x.c +++ b/opal/mca/pmix/pmix2x/pmix2x.c @@ -1328,12 +1328,7 @@ static void pmix2x_log(opal_list_t *info, opal_value_t *ival; size_t n, ninfo; pmix2x_opcaddy_t *cd; - - /* bozo check */ - if (NULL == info || 0 == (ninfo = opal_list_get_size(info))) { - rc = OPAL_ERR_BAD_PARAM; - goto CLEANUP; - } + pmix_status_t prc; /* setup the operation */ cd = OBJ_NEW(pmix2x_opcaddy_t); @@ -1341,6 +1336,12 @@ static void pmix2x_log(opal_list_t *info, cd->cbdata = cbdata; cd->ninfo = ninfo; + /* bozo check */ + if (NULL == info || 0 == (ninfo = opal_list_get_size(info))) { + rc = OPAL_ERR_BAD_PARAM; + goto CLEANUP; + } + /* convert the list to an array of info objects */ PMIX_INFO_CREATE(cd->info, cd->ninfo); n=0; @@ -1351,14 +1352,20 @@ static void pmix2x_log(opal_list_t *info, } /* pass it down */ - PMIx_Log_nb(cd->info, cd->ninfo, NULL, 0, - opcbfunc, cd); + if (PMIX_SUCCESS != (prc = PMIx_Log_nb(cd->info, cd->ninfo, NULL, 0, + opcbfunc, cd))) { + /* do not hang! */ + rc = pmix2x_convert_rc(prc); + goto CLEANUP; + } + return; CLEANUP: if (NULL != cbfunc) { cbfunc(rc, cbdata); } + OBJ_RELEASE(cd); } /**** INSTANTIATE INTERNAL CLASSES ****/