Updating OMPI v4.0.x to PMIx v3.1.5 released
Signed-off-by: Geoffrey Paulsen <gpaulsen@us.ibm.com>
Этот коммит содержится в:
родитель
625f27a715
Коммит
11d79d1f6e
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2015-2019 Intel, Inc. All rights reserved.
|
||||
Copyright (c) 2015-2020 Intel, Inc. All rights reserved.
|
||||
Copyright (c) 2017-2020 IBM Corporation. All rights reserved.
|
||||
$COPYRIGHT$
|
||||
|
||||
@ -58,6 +58,11 @@ in accordance with an Errata update of the PMIx v3 Standard
|
||||
- PR #1613: dstore: Fix cache size calculation
|
||||
- PR #1622: Fix multiple occurrences of unaligned access in pmix tests
|
||||
- PR #1620: Re-address the collective tracker problem
|
||||
- PR #1625: Fix library triplet
|
||||
- PR #1630: Fix support for PGI compiler pgcc18
|
||||
- PR #1637: Realign behavior of PMIx_Get and PMIx_Get_nb
|
||||
- PR #1640: Properly handle forwarded output when no handler registered
|
||||
|
||||
|
||||
|
||||
3.1.4 -- 9 Aug 2019
|
||||
|
@ -25,14 +25,14 @@ release=5
|
||||
# The only requirement is that it must be entirely printable ASCII
|
||||
# characters and have no white space.
|
||||
|
||||
greek=rc2
|
||||
greek=
|
||||
|
||||
# If repo_rev is empty, then the repository version number will be
|
||||
# obtained during "make dist" via the "git describe --tags --always"
|
||||
# command, or with the date (if "git describe" fails) in the form of
|
||||
# "date<date>".
|
||||
|
||||
repo_rev=git1fca232
|
||||
repo_rev=gitedebb24
|
||||
|
||||
# If tarball_version is not empty, it is used as the version string in
|
||||
# the tarball filename, regardless of all other versions listed in
|
||||
@ -46,7 +46,7 @@ tarball_version=
|
||||
|
||||
# The date when this release was created
|
||||
|
||||
date="Feb 10, 2020"
|
||||
date="Feb 19, 2020"
|
||||
|
||||
# The shared library version of each of PMIx's public libraries.
|
||||
# These versions are maintained in accordance with the "Library
|
||||
@ -82,8 +82,8 @@ libpmi_so_version=1:1:0
|
||||
libpmi2_so_version=1:0:0
|
||||
|
||||
# "Common" components install standalone libraries that are run-time
|
||||
# # linked by one or more components. So they need to be versioned as
|
||||
# # well. Yuck; this somewhat breaks the
|
||||
# # components-don't-affect-the-build-system abstraction.
|
||||
# linked by one or more components. So they need to be versioned as
|
||||
# well. Yuck; this somewhat breaks the
|
||||
# components-don't-affect-the-build-system abstraction.
|
||||
#
|
||||
libmca_common_dstore_so_version=1:2:0
|
||||
|
@ -11,7 +11,7 @@ dnl University of Stuttgart. All rights reserved.
|
||||
dnl Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
dnl All rights reserved.
|
||||
dnl Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
|
||||
dnl Copyright (c) 2013 Intel, Inc. All rights reserved
|
||||
dnl Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
|
||||
dnl Copyright (c) 2015 Research Organization for Information Science
|
||||
dnl and Technology (RIST). All rights reserved.
|
||||
@ -45,7 +45,7 @@ AC_DEFUN([PMIX_C_COMPILER_VENDOR], [
|
||||
|
||||
# workaround to avoid syntax error with Autoconf < 2.68:
|
||||
m4_ifndef([AC_LANG_DEFINES_PROVIDED],
|
||||
[m4_define([AC_LANG_DEFINES_PROVIDED])])
|
||||
[m4_define([AC_LANG_DEFINES_PROVIDED])])
|
||||
|
||||
# PMIX_IFDEF_IFELSE(symbol, [action-if-defined],
|
||||
# [action-if-not-defined])
|
||||
@ -85,14 +85,19 @@ AC_DEFUN([_PMIX_CHECK_COMPILER_VENDOR], [
|
||||
pmix_check_compiler_vendor_result="unknown"
|
||||
|
||||
# GNU is probably the most common, so check that one as soon as
|
||||
# possible. Intel pretends to be GNU, so need to check Intel
|
||||
# before checking for GNU.
|
||||
# possible. Intel and PGI18 pretend to be GNU, so need to check Intel
|
||||
# and PGI before checking for GNU.
|
||||
|
||||
# Intel
|
||||
AS_IF([test "$pmix_check_compiler_vendor_result" = "unknown"],
|
||||
[PMIX_IF_IFELSE([defined(__INTEL_COMPILER) || defined(__ICC)],
|
||||
[pmix_check_compiler_vendor_result="intel"])])
|
||||
|
||||
# Portland Group
|
||||
AS_IF([test "$pmix_check_compiler_vendor_result" = "unknown"],
|
||||
[PMIX_IFDEF_IFELSE([__PGI],
|
||||
[pmix_check_compiler_vendor_result="portland group"])])
|
||||
|
||||
# Fujitsu
|
||||
AS_IF([test "$pmix_check_compiler_vendor_result" = "unknown"],
|
||||
[PMIX_IF_IFELSE([defined(__FUJITSU)],
|
||||
@ -212,11 +217,6 @@ AC_DEFUN([_PMIX_CHECK_COMPILER_VENDOR], [
|
||||
[PMIX_IFDEF_IFELSE([__POCC__],
|
||||
[pmix_check_compiler_vendor_result="pelles"])])
|
||||
|
||||
# Portland Group
|
||||
AS_IF([test "$pmix_check_compiler_vendor_result" = "unknown"],
|
||||
[PMIX_IFDEF_IFELSE([__PGI],
|
||||
[pmix_check_compiler_vendor_result="portland group"])])
|
||||
|
||||
# SAS/C
|
||||
AS_IF([test "$pmix_check_compiler_vendor_result" = "unknown"],
|
||||
[PMIX_IF_IFELSE([defined(SASC) || defined(__SASC) || defined(__SASC__)],
|
||||
|
@ -192,7 +192,7 @@
|
||||
|
||||
Summary: An extended/exascale implementation of PMI
|
||||
Name: %{?_name:%{_name}}%{!?_name:pmix}
|
||||
Version: 3.1.5rc2
|
||||
Version: 3.1.5
|
||||
Release: 1%{?dist}
|
||||
License: BSD
|
||||
Group: Development/Libraries
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2016 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2014 Artem Y. Polyakov <artpol84@gmail.com>.
|
||||
@ -89,11 +89,8 @@ PMIX_EXPORT pmix_status_t PMIx_Get(const pmix_proc_t *proc,
|
||||
const pmix_info_t info[], size_t ninfo,
|
||||
pmix_value_t **val)
|
||||
{
|
||||
pmix_cb_t *cb;
|
||||
pmix_cb_t cb;
|
||||
pmix_status_t rc;
|
||||
size_t n, nfo;
|
||||
pmix_proc_t p;
|
||||
pmix_info_t nodeinfo, *iptr;
|
||||
|
||||
PMIX_ACQUIRE_THREAD(&pmix_global_lock);
|
||||
|
||||
@ -108,76 +105,23 @@ PMIX_EXPORT pmix_status_t PMIx_Get(const pmix_proc_t *proc,
|
||||
(NULL == proc) ? "NULL" : PMIX_NAME_PRINT(proc),
|
||||
(NULL == key) ? "NULL" : key);
|
||||
|
||||
memcpy(&p, proc, sizeof(pmix_proc_t));
|
||||
iptr = (pmix_info_t*)info;
|
||||
nfo = ninfo;
|
||||
|
||||
if (!PMIX_PEER_IS_EARLIER(pmix_client_globals.myserver, 3, 1, 5)) {
|
||||
if (PMIX_RANK_UNDEF == proc->rank || NULL == key) {
|
||||
goto doget;
|
||||
}
|
||||
/* if they are asking about a node-level piece of info,
|
||||
* then the rank must be UNDEF */
|
||||
if (pmix_check_node_info(key)) {
|
||||
p.rank = PMIX_RANK_UNDEF;
|
||||
/* see if they told us to get node info */
|
||||
if (NULL == info) {
|
||||
/* guess not - better do it */
|
||||
PMIX_INFO_LOAD(&nodeinfo, PMIX_NODE_INFO, NULL, PMIX_BOOL);
|
||||
iptr = &nodeinfo;
|
||||
nfo = 1;
|
||||
}
|
||||
goto doget;
|
||||
}
|
||||
/* if they are asking about an app-level piece of info,
|
||||
* then the rank must be UNDEF */
|
||||
if (pmix_check_app_info(key)) {
|
||||
p.rank = PMIX_RANK_UNDEF;
|
||||
/* see if they told us to get app info */
|
||||
if (NULL == info) {
|
||||
/* guess not - better do it */
|
||||
PMIX_INFO_LOAD(&nodeinfo, PMIX_APP_INFO, NULL, PMIX_BOOL);
|
||||
iptr = &nodeinfo;
|
||||
nfo = 1;
|
||||
}
|
||||
goto doget;
|
||||
}
|
||||
|
||||
/* see if they are requesting session, node, or app-level info */
|
||||
for (n=0; n < ninfo; n++) {
|
||||
if (PMIX_CHECK_KEY(info, PMIX_NODE_INFO) ||
|
||||
PMIX_CHECK_KEY(info, PMIX_APP_INFO) ||
|
||||
PMIX_CHECK_KEY(info, PMIX_SESSION_INFO)) {
|
||||
goto doget;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* try to get data directly, without threadshift */
|
||||
if (PMIX_SUCCESS == (rc = _getfn_fastpath(&p, key, iptr, nfo, val))) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
doget:
|
||||
/* create a callback object as we need to pass it to the
|
||||
* recv routine so we know which callback to use when
|
||||
* the return message is recvd */
|
||||
cb = PMIX_NEW(pmix_cb_t);
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get_nb(&p, key, iptr, nfo, _value_cbfunc, cb))) {
|
||||
PMIX_RELEASE(cb);
|
||||
/* create a callback object so we can be notified when
|
||||
* the non-blocking operation is complete */
|
||||
PMIX_CONSTRUCT(&cb, pmix_cb_t);
|
||||
if (PMIX_SUCCESS != (rc = PMIx_Get_nb(proc, key, info, ninfo, _value_cbfunc, &cb))) {
|
||||
PMIX_DESTRUCT(&cb);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* wait for the data to return */
|
||||
PMIX_WAIT_THREAD(&cb->lock);
|
||||
rc = cb->status;
|
||||
PMIX_WAIT_THREAD(&cb.lock);
|
||||
rc = cb.status;
|
||||
if (NULL != val) {
|
||||
*val = cb->value;
|
||||
cb->value = NULL;
|
||||
*val = cb.value;
|
||||
cb.value = NULL;
|
||||
}
|
||||
PMIX_RELEASE(cb);
|
||||
PMIX_DESTRUCT(&cb);
|
||||
|
||||
done:
|
||||
pmix_output_verbose(2, pmix_client_globals.get_output,
|
||||
"pmix:client get completed");
|
||||
|
||||
@ -189,8 +133,15 @@ PMIX_EXPORT pmix_status_t PMIx_Get_nb(const pmix_proc_t *proc, const pmix_key_t
|
||||
pmix_value_cbfunc_t cbfunc, void *cbdata)
|
||||
{
|
||||
pmix_cb_t *cb;
|
||||
int rank;
|
||||
char *nm;
|
||||
pmix_status_t rc;
|
||||
size_t n, nfo;
|
||||
bool wantinfo = false;
|
||||
bool haveid = false;
|
||||
pmix_proc_t p;
|
||||
pmix_info_t *iptr;
|
||||
bool copy = false;
|
||||
uint32_t appnum;
|
||||
pmix_value_t *ival = NULL;
|
||||
|
||||
PMIX_ACQUIRE_THREAD(&pmix_global_lock);
|
||||
|
||||
@ -228,31 +179,181 @@ PMIX_EXPORT pmix_status_t PMIx_Get_nb(const pmix_proc_t *proc, const pmix_key_t
|
||||
/* if the given proc param is NULL, or the nspace is
|
||||
* empty, then the caller is referencing our own nspace */
|
||||
if (NULL == proc || 0 == strlen(proc->nspace)) {
|
||||
nm = pmix_globals.myid.nspace;
|
||||
PMIX_LOAD_NSPACE(p.nspace, pmix_globals.myid.nspace);
|
||||
} else {
|
||||
nm = (char*)proc->nspace;
|
||||
PMIX_LOAD_NSPACE(p.nspace, proc->nspace);
|
||||
}
|
||||
|
||||
/* if the proc param is NULL, then we are seeking a key that
|
||||
* must be globally unique, so communicate this to the hash
|
||||
* functions with the UNDEF rank */
|
||||
if (NULL == proc) {
|
||||
rank = PMIX_RANK_UNDEF;
|
||||
p.rank = PMIX_RANK_UNDEF;
|
||||
} else {
|
||||
rank = proc->rank;
|
||||
p.rank = proc->rank;
|
||||
}
|
||||
iptr = (pmix_info_t*)info;
|
||||
nfo = ninfo;
|
||||
|
||||
pmix_output_verbose(2, pmix_client_globals.get_output,
|
||||
"pmix: get_nb value for proc %s:%u key %s",
|
||||
nm, rank, (NULL == key) ? "NULL" : key);
|
||||
"pmix: get_nb value for proc %s key %s",
|
||||
PMIX_NAME_PRINT(&p), (NULL == key) ? "NULL" : key);
|
||||
|
||||
if (!PMIX_PEER_IS_EARLIER(pmix_client_globals.myserver, 3, 1, 5)) {
|
||||
/* ]don't consider the fastpath option
|
||||
* for undefined rank or NULL keys */
|
||||
if (PMIX_RANK_UNDEF == p.rank || NULL == key) {
|
||||
goto doget;
|
||||
}
|
||||
/* if they are asking about a node-level piece of info,
|
||||
* then the rank must be UNDEF */
|
||||
if (pmix_check_node_info(key)) {
|
||||
p.rank = PMIX_RANK_UNDEF;
|
||||
/* the key is node-related - see if the target node is in the
|
||||
* info array and if they tagged the request accordingly */
|
||||
if (NULL != info) {
|
||||
for (n=0; n < ninfo; n++) {
|
||||
if (PMIX_CHECK_KEY(&info[n], PMIX_NODE_INFO)) {
|
||||
wantinfo = true;
|
||||
} else if (PMIX_CHECK_KEY(&info[n], PMIX_HOSTNAME)) {
|
||||
haveid = true;
|
||||
} else if (PMIX_CHECK_KEY(&info[n], PMIX_NODEID)) {
|
||||
haveid = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (wantinfo && haveid) {
|
||||
goto doget;
|
||||
} else if (wantinfo) {
|
||||
/* missing the nodeid/hostname - add our hostname */
|
||||
nfo = ninfo + 1;
|
||||
PMIX_INFO_CREATE(iptr, nfo);
|
||||
for (n=0; n < ninfo; n++) {
|
||||
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||
}
|
||||
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_HOSTNAME, pmix_globals.hostname, PMIX_STRING);
|
||||
copy = true;
|
||||
goto doget;
|
||||
} else if (haveid) {
|
||||
/* flag that we want node info */
|
||||
nfo = ninfo + 1;
|
||||
PMIX_INFO_CREATE(iptr, nfo);
|
||||
for (n=0; n < ninfo; n++) {
|
||||
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||
}
|
||||
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_NODE_INFO, NULL, PMIX_BOOL);
|
||||
copy = true;
|
||||
goto doget;
|
||||
} else {
|
||||
/* missing both */
|
||||
nfo = ninfo + 2;
|
||||
PMIX_INFO_CREATE(iptr, nfo);
|
||||
for (n=0; n < ninfo; n++) {
|
||||
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||
}
|
||||
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_NODE_INFO, NULL, PMIX_BOOL);
|
||||
PMIX_INFO_LOAD(&iptr[ninfo+1], PMIX_HOSTNAME, pmix_globals.hostname, PMIX_STRING);
|
||||
copy = true;
|
||||
goto doget;
|
||||
}
|
||||
}
|
||||
|
||||
/* see if they are asking about an app-level piece of info */
|
||||
wantinfo = false;
|
||||
haveid = false;
|
||||
if (pmix_check_app_info(key)) {
|
||||
p.rank = PMIX_RANK_UNDEF;
|
||||
/* the key is app-related - see if the target appnum is in the
|
||||
* info array and if they tagged the request accordingly */
|
||||
if (NULL != info) {
|
||||
for (n=0; n < ninfo; n++) {
|
||||
if (PMIX_CHECK_KEY(&info[n], PMIX_APP_INFO)) {
|
||||
wantinfo = true;
|
||||
} else if (PMIX_CHECK_KEY(&info[n], PMIX_APPNUM) &&
|
||||
0 != info[n].value.data.uint32) {
|
||||
haveid = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (wantinfo && haveid) {
|
||||
goto doget;
|
||||
} else if (wantinfo) {
|
||||
/* missing the appnum - add ours */
|
||||
nfo = ninfo + 1;
|
||||
PMIX_INFO_CREATE(iptr, nfo);
|
||||
for (n=0; n < ninfo; n++) {
|
||||
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||
}
|
||||
/* try to retrieve it */
|
||||
rc = _getfn_fastpath(&pmix_globals.myid, PMIX_APPNUM, NULL, 0, &ival);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
appnum = ival->data.uint32;
|
||||
PMIX_VALUE_RELEASE(ival);
|
||||
} else {
|
||||
appnum = 0;
|
||||
}
|
||||
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_APPNUM, &appnum, PMIX_UINT32);
|
||||
copy = true;
|
||||
goto doget;
|
||||
} else if (haveid) {
|
||||
/* flag that we want app info */
|
||||
nfo = ninfo + 1;
|
||||
PMIX_INFO_CREATE(iptr, nfo);
|
||||
for (n=0; n < ninfo; n++) {
|
||||
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||
}
|
||||
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_APP_INFO, NULL, PMIX_BOOL);
|
||||
copy = true;
|
||||
goto doget;
|
||||
} else {
|
||||
/* missing both */
|
||||
nfo = ninfo + 2;
|
||||
PMIX_INFO_CREATE(iptr, nfo);
|
||||
for (n=0; n < ninfo; n++) {
|
||||
PMIX_INFO_XFER(&iptr[n], &info[n]);
|
||||
}
|
||||
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_APP_INFO, NULL, PMIX_BOOL);
|
||||
/* try to retrieve it */
|
||||
rc = _getfn_fastpath(&pmix_globals.myid, PMIX_APPNUM, NULL, 0, &ival);
|
||||
if (PMIX_SUCCESS != rc) {
|
||||
appnum = ival->data.uint32;
|
||||
PMIX_VALUE_RELEASE(ival);
|
||||
} else {
|
||||
appnum = 0;
|
||||
}
|
||||
PMIX_INFO_LOAD(&iptr[ninfo], PMIX_APPNUM, &appnum, PMIX_UINT32);
|
||||
copy = true;
|
||||
goto doget;
|
||||
}
|
||||
}
|
||||
|
||||
/* see if they are requesting session info or requesting cache refresh */
|
||||
for (n=0; n < ninfo; n++) {
|
||||
if (PMIX_CHECK_KEY(info, PMIX_SESSION_INFO)) {
|
||||
goto doget;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* try to get data directly, without threadshift */
|
||||
if (PMIX_SUCCESS == (rc = _getfn_fastpath(&p, key, iptr, nfo, &ival))) {
|
||||
if (NULL != cbfunc) {
|
||||
cbfunc(rc, ival, cbdata);
|
||||
/* ownership of the memory in ival is passed to the
|
||||
* user in the cbfunc, so don't release it here */
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
doget:
|
||||
/* threadshift this request so we can access global structures */
|
||||
cb = PMIX_NEW(pmix_cb_t);
|
||||
cb->pname.nspace = strdup(nm);
|
||||
cb->pname.rank = rank;
|
||||
cb->pname.nspace = strdup(p.nspace);
|
||||
cb->pname.rank = p.rank;
|
||||
cb->key = (char*)key;
|
||||
cb->info = (pmix_info_t*)info;
|
||||
cb->ninfo = ninfo;
|
||||
cb->info = iptr;
|
||||
cb->ninfo = nfo;
|
||||
cb->infocopy = copy;
|
||||
cb->cbfunc.valuefn = cbfunc;
|
||||
cb->cbdata = cbdata;
|
||||
PMIX_THREADSHIFT(cb, _getnbfn);
|
||||
@ -469,7 +570,7 @@ static pmix_status_t process_values(pmix_value_t **v, pmix_cb_t *cb)
|
||||
}
|
||||
/* we will return the data as an array of pmix_info_t
|
||||
* in the kvs pmix_value_t */
|
||||
val = (pmix_value_t*)malloc(sizeof(pmix_value_t));
|
||||
PMIX_VALUE_CREATE(val, 1);
|
||||
if (NULL == val) {
|
||||
return PMIX_ERR_NOMEM;
|
||||
}
|
||||
|
@ -307,6 +307,7 @@ static void cbcon(pmix_cb_t *p)
|
||||
p->nprocs = 0;
|
||||
p->info = NULL;
|
||||
p->ninfo = 0;
|
||||
p->infocopy = false;
|
||||
p->nvals = 0;
|
||||
PMIX_CONSTRUCT(&p->kvs, pmix_list_t);
|
||||
p->copy = false;
|
||||
@ -321,6 +322,9 @@ static void cbdes(pmix_cb_t *p)
|
||||
free(p->pname.nspace);
|
||||
}
|
||||
PMIX_DESTRUCT(&p->data);
|
||||
if (p->infocopy) {
|
||||
PMIX_INFO_FREE(p->info, p->ninfo);
|
||||
}
|
||||
PMIX_LIST_DESTRUCT(&p->kvs);
|
||||
}
|
||||
PMIX_EXPORT PMIX_CLASS_INSTANCE(pmix_cb_t,
|
||||
|
@ -11,6 +11,10 @@
|
||||
* Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2019 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2019 Mellanox Technologies, Inc.
|
||||
* All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -391,6 +395,7 @@ typedef struct {
|
||||
size_t nprocs;
|
||||
pmix_info_t *info;
|
||||
size_t ninfo;
|
||||
bool infocopy;
|
||||
size_t nvals;
|
||||
pmix_list_t kvs;
|
||||
bool copy;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2014-2019 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2016 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2014 Artem Y. Polyakov <artpol84@gmail.com>.
|
||||
@ -249,13 +249,8 @@ static void tool_iof_handler(struct pmix_peer_t *pr,
|
||||
goto cleanup;
|
||||
}
|
||||
/* lookup the handler for this IOF package */
|
||||
if (NULL == (req = (pmix_iof_req_t*)pmix_pointer_array_get_item(&pmix_globals.iof_requests, refid))) {
|
||||
/* something wrong here - should not happen */
|
||||
PMIX_ERROR_LOG(PMIX_ERR_NOT_FOUND);
|
||||
goto cleanup;
|
||||
}
|
||||
/* if the handler invokes a callback function, do so */
|
||||
if (NULL != req->cbfunc) {
|
||||
if (NULL != (req = (pmix_iof_req_t*)pmix_pointer_array_get_item(&pmix_globals.iof_requests, refid)) &&
|
||||
NULL != req->cbfunc) {
|
||||
req->cbfunc(refid, channel, &source, &bo, info, ninfo);
|
||||
} else {
|
||||
/* otherwise, simply write it out to the specified std IO channel */
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user