diff --git a/opal/mca/pmix/pmix3x/pmix/LICENSE b/opal/mca/pmix/pmix3x/pmix/LICENSE index f9e6f04791..06f1248793 100644 --- a/opal/mca/pmix/pmix3x/pmix/LICENSE +++ b/opal/mca/pmix/pmix3x/pmix/LICENSE @@ -26,7 +26,7 @@ Copyright (c) 2006-2010 Sun Microsystems, Inc. All rights reserved. Copyright (c) 2006-2010 The University of Houston. All rights reserved. Copyright (c) 2006-2009 Myricom, Inc. All rights reserved. Copyright (c) 2007-2008 UT-Battelle, LLC. All rights reserved. -Copyright (c) 2007-2010 IBM Corporation. All rights reserved. +Copyright (c) 2007-2018 IBM Corporation. All rights reserved. Copyright (c) 1998-2005 Forschungszentrum Juelich, Juelich Supercomputing Centre, Federal Republic of Germany Copyright (c) 2005-2008 ZIH, TU Dresden, Federal Republic of Germany @@ -36,7 +36,7 @@ Copyright (c) 2008-2009 Institut National de Recherche en Informatique. All rights reserved. Copyright (c) 2007 Lawrence Livermore National Security, LLC. All rights reserved. -Copyright (c) 2007-2009 Mellanox Technologies. All rights reserved. +Copyright (c) 2007-2018 Mellanox Technologies. All rights reserved. Copyright (c) 2006-2010 QLogic Corporation. All rights reserved. Copyright (c) 2008-2010 Oak Ridge National Labs. All rights reserved. Copyright (c) 2006-2010 Oracle and/or its affiliates. All rights reserved. @@ -45,7 +45,7 @@ Copyright (c) 2010 ARM ltd. All rights reserved. Copyright (c) 2010-2011 Alex Brick . All rights reserved. Copyright (c) 2012 The University of Wisconsin-La Crosse. All rights reserved. -Copyright (c) 2013-2014 Intel, Inc. All rights reserved. +Copyright (c) 2013-2018 Intel, Inc. All rights reserved. Copyright (c) 2011-2014 NVIDIA Corporation. All rights reserved. $COPYRIGHT$ diff --git a/opal/mca/pmix/pmix3x/pmix/NEWS b/opal/mca/pmix/pmix3x/pmix/NEWS index 0a53c436bc..572b06fb42 100644 --- a/opal/mca/pmix/pmix3x/pmix/NEWS +++ b/opal/mca/pmix/pmix3x/pmix/NEWS @@ -60,8 +60,21 @@ current release as well as the "stable" bug fix release branch. channels, including local/remote syslog and email. Added attributes to query available channels and to tag and format output. +- Fix several memory and file descriptor leaks +2.1.2 -- TBD +---------------------- +- Added PMIX_VERSION_RELEASE string to pmix_version.h +- Added PMIX_SPAWNED and PMIX_PARENT_ID keys to all procs + started via PMIx_Spawn +- Fixed faulty compares in PMI/PMI2 tests +- Fixed bug in direct modex for data on remote node +- Correctly transfer all cached job info to the client's + shared memory region upon first connection +- Fix potential deadlock in PMIx_server_init in an error case +- Fix uninitialized variable +- Fix several memory and file descriptor leaks 2.1.1 -- 23 Feb 2018 diff --git a/opal/mca/pmix/pmix3x/pmix/README b/opal/mca/pmix/pmix3x/pmix/README index 1baa106987..22b0ec55bb 100644 --- a/opal/mca/pmix/pmix3x/pmix/README +++ b/opal/mca/pmix/pmix3x/pmix/README @@ -15,7 +15,7 @@ Copyright (c) 2007 Myricom, Inc. All rights reserved. Copyright (c) 2008 IBM Corporation. All rights reserved. Copyright (c) 2010 Oak Ridge National Labs. All rights reserved. Copyright (c) 2011 University of Houston. All rights reserved. -Copyright (c) 2013-2017 Intel, Inc. All rights reserved. +Copyright (c) 2013-2018 Intel, Inc. All rights reserved. $COPYRIGHT$ Additional copyrights may follow @@ -25,13 +25,14 @@ $HEADER$ =========================================================================== When submitting questions and problems, be sure to include as much -extra information as possible. This web page details all the -information that we request in order to provide assistance: +extra information as possible. The issues template on the +GitHub repo provides directions: - http://pmix.github.io/pmix/community/help/ + http://github.com/pmix/pmix/issues The best way to report bugs, send comments, or ask questions is to -sign up on the PMIx mailing list, which is hosted by GoogleGroups: +open an issue on the repo. Alternatively, you are welcome to sign +up for the developer/user mailing list: pmix@googlegroups.com @@ -48,7 +49,7 @@ Thanks for your time. More information is available in the PMIx FAQ: - http://pmix.github.io/pmix/faq/ + https://pmix.org/support We are in early days, so please be patient - info will grow as questions are addressed. @@ -63,7 +64,7 @@ General notes - The majority of PMIx's documentation is here in this file, the included man pages, and on the web site FAQ - (http://pmix.github.io/pmix/faq). This will eventually be + (https://pmix.org/support). This will eventually be supplemented with cohesive installation and user documentation files. - Systems that have been tested are: @@ -312,7 +313,7 @@ Common Questions Many common questions about building and using PMIx are answered on the FAQ: - http://pmix.github.io/pmix/faq/ + https://pmix.org/support =========================================================================== @@ -323,10 +324,10 @@ Found a bug? Got a question? Want to make a suggestion? Want to contribute to PMIx? Please let us know! When submitting questions and problems, be sure to include as much -extra information as possible. This web page details all the -information that we request in order to provide assistance: +extra information as possible. Again, the issues template is your +friend in this regard! - http://pmix.github.io/pmix/community/help/ + https://github.com/pmix/pmix/issues Questions and comments should generally be sent to the PMIx mailing list (pmix@googlegroups.com). Because of spam, only @@ -338,4 +339,4 @@ user's list: https://groups.google.com/d/forum/pmix -Make today an PMIx day! +Make today a PMIx day! diff --git a/opal/mca/pmix/pmix3x/pmix/VERSION b/opal/mca/pmix/pmix3x/pmix/VERSION index e3e38020a7..7453582b97 100644 --- a/opal/mca/pmix/pmix3x/pmix/VERSION +++ b/opal/mca/pmix/pmix3x/pmix/VERSION @@ -30,7 +30,7 @@ greek= # command, or with the date (if "git describe" fails) in the form of # "date". -repo_rev=git7b5106a +repo_rev=gitffba520 # If tarball_version is not empty, it is used as the version string in # the tarball filename, regardless of all other versions listed in @@ -44,7 +44,7 @@ tarball_version= # The date when this release was created -date="Jun 19, 2018" +date="Jul 01, 2018" # The shared library version of each of PMIx's public libraries. # These versions are maintained in accordance with the "Library diff --git a/opal/mca/pmix/pmix3x/pmix/src/mca/gds/ds12/gds_dstore.c b/opal/mca/pmix/pmix3x/pmix/src/mca/gds/ds12/gds_dstore.c index 20ef97e23c..102f64f27c 100644 --- a/opal/mca/pmix/pmix3x/pmix/src/mca/gds/ds12/gds_dstore.c +++ b/opal/mca/pmix/pmix3x/pmix/src/mca/gds/ds12/gds_dstore.c @@ -2885,6 +2885,8 @@ static pmix_status_t dstore_del_nspace(const char* nspace) ns_map_t *ns_map; session_t *session_tbl = NULL; ns_track_elem_t *trk = NULL; + int dstor_track_idx; + size_t session_tbl_idx; PMIX_OUTPUT_VERBOSE((10, pmix_gds_base_framework.framework_output, "%s:%d:%s delete nspace `%s`", __FILE__, __LINE__, __func__, nspace)); @@ -2893,7 +2895,8 @@ static pmix_status_t dstore_del_nspace(const char* nspace) rc = PMIX_ERR_NOT_AVAILABLE; return rc; } - + dstor_track_idx = ns_map_data->track_idx; + session_tbl_idx = ns_map_data->tbl_idx; size = pmix_value_array_get_size(_ns_map_array); ns_map = PMIX_VALUE_ARRAY_GET_BASE(_ns_map_array, ns_map_t); @@ -2905,19 +2908,6 @@ static pmix_status_t dstore_del_nspace(const char* nspace) continue; } in_use++; - break; - } - } - - if(ns_map_data->track_idx >= 0) { - trk = pmix_value_array_get_item(_ns_track_array, ns_map_data->track_idx); - if((ns_map_data->track_idx + 1) > (int)pmix_value_array_get_size(_ns_track_array)) { - rc = PMIX_ERR_VALUE_OUT_OF_BOUNDS; - PMIX_ERROR_LOG(rc); - goto exit; - } - if (true == trk->in_use) { - PMIX_DESTRUCT(trk); } } @@ -2925,10 +2915,22 @@ static pmix_status_t dstore_del_nspace(const char* nspace) * session record can only be deleted once all references are gone */ if (!in_use) { session_tbl = PMIX_VALUE_ARRAY_GET_BASE(_session_array, session_t); - PMIX_OUTPUT_VERBOSE((10, pmix_gds_base_framework.framework_output, - "%s:%d:%s delete session for jobuid: %d", __FILE__, __LINE__, __func__, session_tbl[ns_map_data->tbl_idx].jobuid)); - _esh_session_release(&session_tbl[ns_map_data->tbl_idx]); + "%s:%d:%s delete session for jobuid: %d", + __FILE__, __LINE__, __func__, session_tbl[session_tbl_idx].jobuid)); + size = pmix_value_array_get_size(_ns_track_array); + if (size && (dstor_track_idx >= 0)) { + if((dstor_track_idx + 1) > size) { + rc = PMIX_ERR_VALUE_OUT_OF_BOUNDS; + PMIX_ERROR_LOG(rc); + goto exit; + } + trk = pmix_value_array_get_item(_ns_track_array, dstor_track_idx); + if (true == trk->in_use) { + PMIX_DESTRUCT(trk); + } + } + _esh_session_release(&session_tbl[session_tbl_idx]); } exit: return rc; diff --git a/opal/mca/pmix/pmix3x/pmix/src/server/pmix_server.c b/opal/mca/pmix/pmix3x/pmix/src/server/pmix_server.c index ef87ad3f41..2904687775 100644 --- a/opal/mca/pmix/pmix3x/pmix/src/server/pmix_server.c +++ b/opal/mca/pmix/pmix3x/pmix/src/server/pmix_server.c @@ -1821,10 +1821,10 @@ static void clct_complete(pmix_status_t status, static void clct(int sd, short args, void *cbdata) { pmix_inventory_rollup_t *cd = (pmix_inventory_rollup_t*)cbdata; + pmix_status_t rc; #if PMIX_HAVE_HWLOC /* if we don't know our topology, we better get it now */ - pmix_status_t rc; if (NULL == pmix_hwloc_topology) { if (PMIX_SUCCESS != (rc = pmix_hwloc_get_topology(NULL, 0))) { PMIX_ERROR_LOG(rc); diff --git a/opal/mca/pmix/pmix3x/pmix/test/simple/Makefile.am b/opal/mca/pmix/pmix3x/pmix/test/simple/Makefile.am index 3db10c3fd6..4beeab62b1 100644 --- a/opal/mca/pmix/pmix3x/pmix/test/simple/Makefile.am +++ b/opal/mca/pmix/pmix3x/pmix/test/simple/Makefile.am @@ -27,91 +27,91 @@ noinst_PROGRAMS = simptest simpclient simppub simpdyn simpft simpdmodex \ test_pmix simptool simpdie simplegacy simptimeout \ gwtest gwclient stability quietclient -simptest_SOURCES = \ +simptest_SOURCES = $(headers) \ simptest.c simptest_LDFLAGS = $(PMIX_PKG_CONFIG_LDFLAGS) simptest_LDADD = \ $(top_builddir)/src/libpmix.la -simpclient_SOURCES = \ +simpclient_SOURCES = $(headers) \ simpclient.c simpclient_LDFLAGS = $(PMIX_PKG_CONFIG_LDFLAGS) simpclient_LDADD = \ $(top_builddir)/src/libpmix.la -simppub_SOURCES = \ +simppub_SOURCES = $(headers) \ simppub.c simppub_LDFLAGS = $(PMIX_PKG_CONFIG_LDFLAGS) simppub_LDADD = \ $(top_builddir)/src/libpmix.la -simpdmodex_SOURCES = \ +simpdmodex_SOURCES = $(headers) \ simpdmodex.c simpdmodex_LDFLAGS = $(PMIX_PKG_CONFIG_LDFLAGS) simpdmodex_LDADD = \ $(top_builddir)/src/libpmix.la -simpft_SOURCES = \ +simpft_SOURCES = $(headers) \ simpft.c simpft_LDFLAGS = $(PMIX_PKG_CONFIG_LDFLAGS) simpft_LDADD = \ $(top_builddir)/src/libpmix.la -simpdyn_SOURCES = \ +simpdyn_SOURCES = $(headers) \ simpdyn.c simpdyn_LDFLAGS = $(PMIX_PKG_CONFIG_LDFLAGS) simpdyn_LDADD = \ $(top_builddir)/src/libpmix.la -test_pmix_SOURCES = \ +test_pmix_SOURCES = $(headers) \ test_pmix.c test_pmix_LDFLAGS = $(PMIX_PKG_CONFIG_LDFLAGS) test_pmix_LDADD = \ $(top_builddir)/src/libpmix.la -simptool_SOURCES = \ +simptool_SOURCES = $(headers) \ simptool.c simptool_LDFLAGS = $(PMIX_PKG_CONFIG_LDFLAGS) simptool_LDADD = \ $(top_builddir)/src/libpmix.la -simpdie_SOURCES = \ +simpdie_SOURCES = $(headers) \ simpdie.c simpdie_LDFLAGS = $(PMIX_PKG_CONFIG_LDFLAGS) simpdie_LDADD = \ $(top_builddir)/src/libpmix.la -simplegacy_SOURCES = \ +simplegacy_SOURCES = $(headers) \ simplegacy.c simplegacy_LDFLAGS = $(PMIX_PKG_CONFIG_LDFLAGS) simplegacy_LDADD = \ $(top_builddir)/src/libpmix.la -simptimeout_SOURCES = \ +simptimeout_SOURCES = $(headers) \ simptimeout.c simptimeout_LDFLAGS = $(PMIX_PKG_CONFIG_LDFLAGS) simptimeout_LDADD = \ $(top_builddir)/src/libpmix.la -gwtest_SOURCES = \ +gwtest_SOURCES = $(headers) \ gwtest.c gwtest_LDFLAGS = $(PMIX_PKG_CONFIG_LDFLAGS) gwtest_LDADD = \ $(top_builddir)/src/libpmix.la -gwclient_SOURCES = \ +gwclient_SOURCES = $(headers) \ gwclient.c gwclient_LDFLAGS = $(PMIX_PKG_CONFIG_LDFLAGS) gwclient_LDADD = \ $(top_builddir)/src/libpmix.la -stability_SOURCES = \ +stability_SOURCES = $(headers) \ stability.c stability_LDFLAGS = $(PMIX_PKG_CONFIG_LDFLAGS) stability_LDADD = \ $(top_builddir)/src/libpmix.la -quietclient_SOURCES = \ +quietclient_SOURCES = $(headers) \ quietclient.c quietclient_LDFLAGS = $(PMIX_PKG_CONFIG_LDFLAGS) quietclient_LDADD = \ diff --git a/opal/mca/pmix/pmix3x/pmix/test/simple/simptest.h b/opal/mca/pmix/pmix3x/pmix/test/simple/simptest.h new file mode 100644 index 0000000000..89f1c00dd3 --- /dev/null +++ b/opal/mca/pmix/pmix3x/pmix/test/simple/simptest.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2018 Intel, Inc. All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + * + */ + +#include +#include +#include +#include +#include + +typedef struct { + pthread_mutex_t mutex; + pthread_cond_t cond; + volatile bool active; + pmix_status_t status; +} mylock_t; + +#define DEBUG_CONSTRUCT_LOCK(l) \ + do { \ + pthread_mutex_init(&(l)->mutex, NULL); \ + pthread_cond_init(&(l)->cond, NULL); \ + (l)->active = true; \ + (l)->status = PMIX_SUCCESS; \ + } while(0) + +#define DEBUG_DESTRUCT_LOCK(l) \ + do { \ + pthread_mutex_destroy(&(l)->mutex); \ + pthread_cond_destroy(&(l)->cond); \ + } while(0) + +#define DEBUG_WAIT_THREAD(lck) \ + do { \ + pthread_mutex_lock(&(lck)->mutex); \ + while ((lck)->active) { \ + pthread_cond_wait(&(lck)->cond, &(lck)->mutex); \ + } \ + pthread_mutex_unlock(&(lck)->mutex); \ + } while(0) + +#define DEBUG_WAKEUP_THREAD(lck) \ + do { \ + pthread_mutex_lock(&(lck)->mutex); \ + (lck)->active = false; \ + pthread_cond_broadcast(&(lck)->cond); \ + pthread_mutex_unlock(&(lck)->mutex); \ + } while(0)