From: Alastair McKinstry Date: Sun, 19 Aug 2018 18:06:13 +0000 (+0100) Subject: hang-fix X-Git-Tag: archive/raspbian/3.1.1.real-7+rpi1^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=29859b78f1010a42082a7eba705f9f66502a0560;p=openmpi.git hang-fix Gbp-Pq: Name hang-fix.patch --- diff --git a/orte/orted/pmix/pmix_server_gen.c b/orte/orted/pmix/pmix_server_gen.c index 39850edf..d07177e0 100644 --- a/orte/orted/pmix/pmix_server_gen.c +++ b/orte/orted/pmix/pmix_server_gen.c @@ -859,6 +859,15 @@ void pmix_tool_connected_fn(opal_list_t *info, } +static void lgcbfn(int sd, short args, void *cbdata) +{ + orte_pmix_server_op_caddy_t *cd = (orte_pmix_server_op_caddy_t*)cbdata; + if (NULL != cd->cbfunc) { + cd->cbfunc(cd->status, cd->cbdata); + } + OBJ_RELEASE(cd); +} + void pmix_server_log_fn(opal_process_name_t *requestor, opal_list_t *info, opal_list_t *directives, @@ -907,6 +916,14 @@ void pmix_server_log_fn(opal_process_name_t *requestor, if (NULL != cbfunc) { cbfunc(OPAL_SUCCESS, cbdata); } + + /* we cannot directly execute the callback here + * as it would threadlock - so shift to somewhere + * safe */ + rc = ORTE_SUCCESS; // unused - silence compiler warning + ORTE_PMIX_THREADSHIFT(requestor, NULL, rc, + NULL, NULL, lgcbfn, + cbfunc, cbdata); } int pmix_server_job_ctrl_fn(const opal_process_name_t *requestor,