diff --git a/ompi/dpm/dpm.c b/ompi/dpm/dpm.c index 043dd282d3..2e7826c52f 100644 --- a/ompi/dpm/dpm.c +++ b/ompi/dpm/dpm.c @@ -536,7 +536,7 @@ static int construct_peers(ompi_group_t *group, opal_list_t *peers) } else { proc_name = proct->super.proc_name; } - + /* add to the list of peers */ nm = OBJ_NEW(opal_namelist_t); nm->name = proc_name; @@ -1203,7 +1203,7 @@ static bool ompi_dpm_group_is_dyn (ompi_group_t *group, ompi_jobid_t thisjobid) { int size = group ? ompi_group_size (group) : 0; - for (int i = 1 ; i < size ; ++i) { + for (int i = 0 ; i < size ; ++i) { opal_process_name_t name = ompi_group_get_proc_name (group, i); if (thisjobid != ((ompi_process_name_t *) &name)->jobid) { diff --git a/opal/Makefile.am b/opal/Makefile.am index a7c9d0bc5d..127ac4fa59 100644 --- a/opal/Makefile.am +++ b/opal/Makefile.am @@ -75,6 +75,7 @@ nobase_opal_HEADERS = $(headers) endif include class/Makefile.am +include errhandler/Makefile.am include memoryhooks/Makefile.am include runtime/Makefile.am include threads/Makefile.am diff --git a/opal/errhandler/Makefile.am b/opal/errhandler/Makefile.am new file mode 100644 index 0000000000..b6e3eab4d5 --- /dev/null +++ b/opal/errhandler/Makefile.am @@ -0,0 +1,17 @@ +# -*- makefile -*- +# +# Copyright (c) 2015 Intel, Inc. All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +# This makefile.am does not stand on its own - it is included from opal/Makefile.am + +headers += \ + errhandler/opal_errhandler.h + +lib@OPAL_LIB_PREFIX@open_pal_la_SOURCES += \ + errhandler/opal_errhandler.c diff --git a/opal/errhandler/opal_errhandler.c b/opal/errhandler/opal_errhandler.c new file mode 100644 index 0000000000..fdd00d6767 --- /dev/null +++ b/opal/errhandler/opal_errhandler.c @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2015 Intel, Inc. All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "opal_config.h" + +#include "opal/errhandler/opal_errhandler.h" + +opal_errhandler_fn_t errhandler = NULL; +void *cbdata = NULL; + +void opal_register_errhandler(opal_errhandler_fn_t newerr, void *cbd) +{ + errhandler = newerr; + cbdata = cbd; +} + +void opal_deregister_errhandler(void) +{ + errhandler = NULL; + cbdata = NULL; +} + +void opal_invoke_errhandler(int status, opal_proc_t *proc) +{ + if (NULL != errhandler) { + errhandler(status, proc, cbdata); + } +} diff --git a/opal/errhandler/opal_errhandler.h b/opal/errhandler/opal_errhandler.h new file mode 100644 index 0000000000..4a1646f52b --- /dev/null +++ b/opal/errhandler/opal_errhandler.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2015 Intel, Inc. All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#ifndef OPAL_ERRHANDLER_H +#define OPAL_ERRHANDLER_H + +#include "opal_config.h" + +#include "opal/util/proc.h" + +typedef void (*opal_errhandler_fn_t)(int status, opal_proc_t *proc, void *cbdata); + +OPAL_DECLSPEC void opal_register_errhandler(opal_errhandler_fn_t errhandler, void *cbdata); + +OPAL_DECLSPEC void opal_deregister_errhandler(void); + +OPAL_DECLSPEC void opal_invoke_errhandler(int status, opal_proc_t *proc); + +#endif diff --git a/opal/mca/pmix/base/base.h b/opal/mca/pmix/base/base.h index 6aaf308c4a..1551f8eb4d 100644 --- a/opal/mca/pmix/base/base.h +++ b/opal/mca/pmix/base/base.h @@ -32,11 +32,17 @@ OPAL_DECLSPEC int opal_pmix_base_select(void); OPAL_DECLSPEC extern bool opal_pmix_base_allow_delayed_server; -OPAL_DECLSPEC void opal_pmix_base_register_handler(opal_pmix_errhandler_fn_t err); -OPAL_DECLSPEC void opal_pmix_base_deregister_handler(void); +OPAL_DECLSPEC void opal_pmix_base_register_handler(opal_list_t *info, + opal_pmix_notification_fn_t errhandler, + opal_pmix_errhandler_reg_cbfunc_t cbfunc, + void *cbdata); +OPAL_DECLSPEC void opal_pmix_base_deregister_handler(int errhandler, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata); OPAL_DECLSPEC void opal_pmix_base_errhandler(int status, opal_list_t *procs, - opal_list_t *info); + opal_list_t *info, + opal_pmix_release_cbfunc_t cbfunc, void *cbdata); OPAL_DECLSPEC int opal_pmix_base_exchange(opal_value_t *info, opal_pmix_pdata_t *pdat, int timeout); diff --git a/opal/mca/pmix/base/pmix_base_fns.c b/opal/mca/pmix/base/pmix_base_fns.c index 48a366b3c7..9ffba7b33b 100644 --- a/opal/mca/pmix/base/pmix_base_fns.c +++ b/opal/mca/pmix/base/pmix_base_fns.c @@ -38,26 +38,40 @@ #define OPAL_PMI_PAD 10 -/******** ERRHANDLER SUPPORT ********/ -static opal_pmix_errhandler_fn_t errhandler = NULL; - -void opal_pmix_base_register_handler(opal_pmix_errhandler_fn_t err) +/******** ERRHANDLER SUPPORT FOR COMPONENTS THAT + ******** DO NOT NATIVELY SUPPORT IT + ********/ +static opal_pmix_notification_fn_t errhandler = NULL; + +void opal_pmix_base_register_handler(opal_list_t *info, + opal_pmix_notification_fn_t err, + opal_pmix_errhandler_reg_cbfunc_t cbfunc, + void *cbdata) { errhandler = err; + if (NULL != cbfunc) { + cbfunc(OPAL_SUCCESS, 0, cbdata); + } } void opal_pmix_base_errhandler(int status, opal_list_t *procs, - opal_list_t *info) + opal_list_t *info, + opal_pmix_release_cbfunc_t cbfunc, void *cbdata) { if (NULL != errhandler) { - errhandler(status); + errhandler(status, procs, info, cbfunc, cbdata); } } -void opal_pmix_base_deregister_handler(void) +void opal_pmix_base_deregister_handler(int errid, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata) { errhandler = NULL; + if (NULL != cbfunc) { + cbfunc(OPAL_SUCCESS, cbdata); + } } struct lookup_caddy_t { diff --git a/opal/mca/pmix/external/Makefile.am b/opal/mca/pmix/external/Makefile.am index d7fbefcfc8..770850c6e3 100644 --- a/opal/mca/pmix/external/Makefile.am +++ b/opal/mca/pmix/external/Makefile.am @@ -44,7 +44,5 @@ noinst_LTLIBRARIES = $(component_noinst) libmca_pmix_external_la_SOURCES =$(sources) libmca_pmix_external_la_CFLAGS = libmca_pmix_external_la_CPPFLAGS = $(opal_pmix_ext_CPPFLAGS) -libmca_pmix_external_la_LDFLAGS = -module -avoid-version -L$(opal_pmix_ext_LDFLAGS) -libmca_pmix_external_la_LIBADD = $(opal_pmix_ext_LIBS) \ - $(OPAL_TOP_BUILDDIR)/opal/mca/event/lib@OPAL_LIB_PREFIX@mca_event.la \ - $(OPAL_TOP_BUILDDIR)/opal/mca/hwloc/lib@OPAL_LIB_PREFIX@mca_hwloc.la +libmca_pmix_external_la_LDFLAGS = -module -avoid-version $(opal_pmix_ext_LDFLAGS) +libmca_pmix_external_la_LIBADD = $(opal_pmix_ext_LIBS) diff --git a/opal/mca/pmix/external/pmix_ext_client.c b/opal/mca/pmix/external/pmix_ext_client.c index 04f5981df6..fb4fd6fcb7 100644 --- a/opal/mca/pmix/external/pmix_ext_client.c +++ b/opal/mca/pmix/external/pmix_ext_client.c @@ -36,6 +36,18 @@ static pmix_proc_t my_proc; static char *dbgvalue=NULL; static int errhdler_ref = 0; +static void completion_handler (void * cbdata) { + int * cond = (int *)cbdata; + *cond = 0; +} + +#define PMIX_WAIT_FOR_COMPLETION(a) \ + do { \ + while ((a)) { \ + usleep(10); \ + } \ + } while (0); + static void myerr(pmix_status_t status, pmix_proc_t procs[], size_t nprocs, pmix_info_t info[], size_t ninfo) @@ -45,6 +57,7 @@ static void myerr(pmix_status_t status, opal_namelist_t *nm; opal_value_t *iptr; size_t n; + volatile int cond = 1; /* convert the incoming status */ rc = pmix1_convert_rc(status); @@ -64,11 +77,13 @@ static void myerr(pmix_status_t status, iptr = OBJ_NEW(opal_value_t); iptr->key = strdup(info[n].key); pmix1_value_unload(iptr, &info[n].value); - opal_list_append(&plist, &nm->super); + opal_list_append(&plist, &iptr->super); } /* call the base errhandler */ - opal_pmix_base_errhandler(rc, &plist, &ilist); + opal_pmix_base_errhandler(rc, &plist, &ilist, completion_handler, (void *)&cond); + PMIX_WAIT_FOR_COMPLETION(cond); + OPAL_LIST_DESTRUCT(&plist); OPAL_LIST_DESTRUCT(&ilist); } diff --git a/opal/mca/pmix/external/pmix_ext_server_south.c b/opal/mca/pmix/external/pmix_ext_server_south.c index abf3b5b358..2feed76309 100644 --- a/opal/mca/pmix/external/pmix_ext_server_south.c +++ b/opal/mca/pmix/external/pmix_ext_server_south.c @@ -50,6 +50,18 @@ extern opal_pmix_server_module_t *host_module; static char *dbgvalue=NULL; static int errhdler_ref = 0; +static void completion_handler (void * cbdata) { + int * cond = (int *)cbdata; + *cond = 0; +} + +#define PMIX_WAIT_FOR_COMPLETION(a) \ + do { \ + while ((a)) { \ + usleep(10); \ + } \ + } while (0); + static void myerr(pmix_status_t status, pmix_proc_t procs[], size_t nprocs, pmix_info_t info[], size_t ninfo) @@ -58,6 +70,7 @@ static void myerr(pmix_status_t status, opal_list_t plist, ilist; opal_namelist_t *nm; opal_value_t *iptr; + volatile int cond = 1; size_t n; /* convert the incoming status */ @@ -78,11 +91,13 @@ static void myerr(pmix_status_t status, iptr = OBJ_NEW(opal_value_t); iptr->key = strdup(info[n].key); pmix1_value_unload(iptr, &info[n].value); - opal_list_append(&plist, &nm->super); + opal_list_append(&plist, &iptr->super); } /* call the base errhandler */ - opal_pmix_base_errhandler(rc, &plist, &ilist); + opal_pmix_base_errhandler(rc, &plist, &ilist, completion_handler, (void *)&cond); + PMIX_WAIT_FOR_COMPLETION(cond); + OPAL_LIST_DESTRUCT(&plist); OPAL_LIST_DESTRUCT(&ilist); } diff --git a/opal/mca/pmix/pmix.h b/opal/mca/pmix/pmix.h index 64c7895d59..faf65c6578 100644 --- a/opal/mca/pmix/pmix.h +++ b/opal/mca/pmix/pmix.h @@ -280,10 +280,6 @@ extern int opal_pmix_base_exchange(opal_value_t *info, } while(0); -/* callback handler for errors */ -typedef void (*opal_pmix_errhandler_fn_t)(int error); - - /************************************************************ * CLIENT APIs * ************************************************************/ @@ -690,17 +686,6 @@ typedef int (*opal_pmix_base_module_server_dmodex_request_fn_t)(const opal_proce * The info array contains any further info the RM can and/or chooses * to provide. * - * If the payload and size parameters are non-NULL, then the function - * will assume that the caller intends to send the message itself. In - * this situation, the convenience library will simply pack the message - * for transmission, and return the payload and size in the provided - * variables (external comm should have been indicated during server_init). - * The caller will be responsible for thread protection. - * - * Otherwise, the convenience library will transmit the message to - * the identified target processes, and the function call will be - * internally thread protected. - * * The callback function will be called upon completion of the * notify_error function's actions. Note that any messages will * have been queued, but may not have been transmitted by this @@ -720,11 +705,92 @@ typedef int (*opal_pmix_base_module_server_notify_error_fn_t)(int status, /* get the version of the embedded library */ typedef const char* (*opal_pmix_base_module_get_version_fn_t)(void); -/* register an errhandler to report loss of connection to the server */ -typedef void (*opal_pmix_base_module_register_fn_t)(opal_pmix_errhandler_fn_t errhandler); +/* Register an errhandler to report errors. Three types of errors + * can be reported: + * + * (a) those that occur within the client library, but are not + * reportable via the API itself (e.g., loss of connection to + * the server). These errors typically occur during behind-the-scenes + * non-blocking operations. + * + * (b) job-related errors such as the failure of another process in + * the job or in any connected job, impending failure of hardware + * within the job's usage footprint, etc. + * + * (c) system notifications that are made available by the local + * administrators + * + * By default, only errors that directly affect the process and/or + * any process to which it is connected (via the PMIx_Connect call) + * will be reported. Options to modify that behavior can be provided + * in the info array + * + * Both the client application and the resource manager can register + * err handlers for specific errors. PMIx client/server calls the registered + * err handler upon receiving error notify notification (via PMIx_Notify_error) + * from the other end (Resource Manager/Client application). + * + * Multiple err handlers can be registered for different errors. PMIX returns + * an integer reference to each register handler in the callback fn. The caller + * must retain the reference in order to deregister the errhandler. + * Modification of the notification behavior can be accomplished by + * deregistering the current errhandler, and then registering it + * using a new set of info values. + * + * See pmix_types.h for a description of the notification function */ +typedef void (*opal_pmix_base_module_register_fn_t)(opal_list_t *info, + opal_pmix_notification_fn_t errhandler, + opal_pmix_errhandler_reg_cbfunc_t cbfunc, + void *cbdata); + +/* deregister the errhandler + * errhandler_ref is the reference returned by PMIx for the errhandler + * to pmix_errhandler_reg_cbfunc_t */ +typedef void (*opal_pmix_base_module_deregister_fn_t)(int errhandler, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata); -/* deregister the errhandler */ -typedef void (*opal_pmix_base_module_deregister_fn_t)(void); +/* Report an error to a process for notification via any + * registered errhandler. The errhandler registration can be + * called by both the server and the client application. On the + * server side, the errhandler is used to report errors detected + * by PMIx to the host server for handling. On the client side, + * the errhandler is used to notify the process of errors + * reported by the server - e.g., the failure of another process. + * + * This function allows the host server to direct the server + * convenience library to notify all indicated local procs of + * an error. The error can be local, or anywhere in the cluster. + * The status indicates the error being reported. + * + * The client application can also call this function to notify the + * resource manager of an error it encountered. It can request the host + * server to notify the indicated processes about the error. + * + * The first array of procs informs the server library as to which + * processes should be alerted - e.g., the processes that are in + * a directly-affected job or are connected to one that is affected. + * Passing a NULL for this array will indicate that all local procs + * are to be notified. + * + * The second array identifies the processes that will be impacted + * by the error. This could consist of a single process, or a number + * of processes. + * + * The info array contains any further info the RM can and/or chooses + * to provide. + * + * The callback function will be called upon completion of the + * notify_error function's actions. Note that any messages will + * have been queued, but may not have been transmitted by this + * time. Note that the caller is required to maintain the input + * data until the callback function has been executed! +*/ +typedef int (*opal_pmix_base_module_notify_error_fn_t)(int status, + opal_list_t *procs, + opal_list_t *error_procs, + opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, void *cbdata); /* store data internally, but don't push it out to be shared - this is * intended solely for storage of info on other procs that comes thru @@ -784,6 +850,7 @@ typedef struct { opal_pmix_base_module_get_version_fn_t get_version; opal_pmix_base_module_register_fn_t register_errhandler; opal_pmix_base_module_deregister_fn_t deregister_errhandler; + opal_pmix_base_module_notify_error_fn_t notify_error; opal_pmix_base_module_store_fn_t store_local; opal_pmix_base_module_get_nspace_fn_t get_nspace; opal_pmix_base_module_register_jobid_fn_t register_jobid; diff --git a/opal/mca/pmix/pmix112/configure.m4 b/opal/mca/pmix/pmix112/configure.m4 index ccade7f828..1d920b30d6 100644 --- a/opal/mca/pmix/pmix112/configure.m4 +++ b/opal/mca/pmix/pmix112/configure.m4 @@ -12,7 +12,7 @@ # All rights reserved. # Copyright (c) 2011-2013 Los Alamos National Security, LLC. # All rights reserved. -# Copyright (c) 2010-2015 Cisco Systems, Inc. All rights reserved. +# Copyright (c) 2010-2016 Cisco Systems, Inc. All rights reserved. # Copyright (c) 2013-2015 Intel, Inc. All rights reserved. # Copyright (c) 2015 Research Organization for Information Science # and Technology (RIST). All rights reserved. @@ -28,50 +28,43 @@ AC_DEFUN([MCA_opal_pmix_pmix112_CONFIG],[ AC_CONFIG_FILES([opal/mca/pmix/pmix112/Makefile]) + OPAL_VAR_SCOPE_PUSH([PMIX_VERSION opal_pmix_pmix112_save_CPPFLAGS opal_pmix_pmix112_save_LDFLAGS opal_pmix_pmix112_save_LIBS opal_pmix_pmix112_basedir opal_pmix_pmix112_save_cflags]) + AS_IF([test "$opal_external_pmix_happy" = "yes"], [AC_MSG_WARN([using an external pmix; disqualifiying this component]) opal_pmix_pmix112_happy=0], + [PMIX_VERSION= + opal_pmix_pmix112_basedir=opal/mca/pmix/pmix112 - [OPAL_VAR_SCOPE_PUSH([PMIX_VERSION opal_pmix_pmix112_save_CPPFLAGS opal_pmix_pmix112_save_LDFLAGS opal_pmix_pmix112_save_LIBS opal_pmix_pmix112_basedir opal_pmix_pmix112_save_cflags]) - - PMIX_VERSION= - opal_pmix_pmix112_basedir=opal/mca/pmix/pmix112 - - opal_pmix_pmix112_save_CFLAGS=$CFLAGS - opal_pmix_pmix112_save_CPPFLAGS=$CPPFLAGS - opal_pmix_pmix112_save_LDFLAGS=$LDFLAGS - opal_pmix_pmix112_save_LIBS=$LIBS - - opal_pmix_pmix112_args="--enable-embedded-mode --with-pmix-symbol-prefix=opal_pmix_pmix112_ --with-libevent-header=\\\"opal/mca/event/$opal_event_base_include\\\" --with-hwloc-header=\\\"$opal_hwloc_base_include\\\"" - if test "$enable_debug" = "yes"; then - opal_pmix_pmix112_args="--enable-debug $opal_pmix_pmix112_args" - CFLAGS="$OPAL_CFLAGS_BEFORE_PICKY $OPAL_VISIBILITY_CFLAGS -g" - else - opal_pmix_pmix112_args="--disable-debug $opal_pmix_pmix112_args" - CFLAGS="$OPAL_CFLAGS_BEFORE_PICKY $OPAL_VISIBILITY_CFLAGS" - fi - CPPFLAGS="-I$OPAL_TOP_SRCDIR -I$OPAL_TOP_BUILDDIR -I$OPAL_TOP_SRCDIR/opal/include -I$OPAL_TOP_BUILDDIR/opal/include $CPPFLAGS" + opal_pmix_pmix112_save_CFLAGS=$CFLAGS + opal_pmix_pmix112_save_CPPFLAGS=$CPPFLAGS + opal_pmix_pmix112_save_LDFLAGS=$LDFLAGS + opal_pmix_pmix112_save_LIBS=$LIBS - OPAL_CONFIG_SUBDIR([$opal_pmix_pmix112_basedir/pmix], - [$opal_pmix_pmix112_args $opal_subdir_args 'CFLAGS=$CFLAGS' 'CPPFLAGS=$CPPFLAGS'], - [opal_pmix_pmix112_happy=1], [opal_pmix_pmix112_happy=0]) + opal_pmix_pmix112_args="--enable-embedded-mode --with-pmix-symbol-prefix=opal_pmix_pmix112_ --with-libevent-header=\\\"opal/mca/event/$opal_event_base_include\\\" --with-hwloc-header=\\\"$opal_hwloc_base_include\\\"" + AS_IF([test "$enable_debug" = "yes"], + [opal_pmix_pmix112_args="--enable-debug $opal_pmix_pmix112_args" + CFLAGS="$OPAL_CFLAGS_BEFORE_PICKY $OPAL_VISIBILITY_CFLAGS -g"], + [opal_pmix_pmix112_args="--disable-debug $opal_pmix_pmix112_args" + CFLAGS="$OPAL_CFLAGS_BEFORE_PICKY $OPAL_VISIBILITY_CFLAGS"]) + CPPFLAGS="-I$OPAL_TOP_SRCDIR -I$OPAL_TOP_BUILDDIR -I$OPAL_TOP_SRCDIR/opal/include -I$OPAL_TOP_BUILDDIR/opal/include $CPPFLAGS" - if test $opal_pmix_pmix112_happy -eq 1; then - PMIX_VERSION="internal v`$srcdir/$opal_pmix_pmix112_basedir/pmix/config/pmix_get_version.sh $srcdir/$opal_pmix_pmix112_basedir/pmix/VERSION`" - # Build flags for our Makefile.am - opal_pmix_pmix112_LIBS='$(OPAL_TOP_BUILDDIR)/'"$opal_pmix_pmix112_basedir"'/pmix/libpmix.la' - opal_pmix_pmix112_CPPFLAGS='-I$(OPAL_TOP_BUILDDIR)/opal/mca/pmix/pmix112/pmix/include/pmix -I$(OPAL_TOP_BUILDDIR)/opal/mca/pmix/pmix112/pmix/include -I$(OPAL_TOP_BUILDDIR)/opal/mca/pmix/pmix112/pmix -I$(OPAL_TOP_SRCDIR)/opal/mca/pmix/pmix112/pmix' - AC_SUBST([opal_pmix_pmix112_LIBS]) - AC_SUBST([opal_pmix_pmix112_CPPFLAGS]) - fi + OPAL_CONFIG_SUBDIR([$opal_pmix_pmix112_basedir/pmix], + [$opal_pmix_pmix112_args $opal_subdir_args 'CFLAGS=$CFLAGS' 'CPPFLAGS=$CPPFLAGS'], + [opal_pmix_pmix112_happy=1], [opal_pmix_pmix112_happy=0]) - # Finally, add a flag to support static builds - pmix_pmix112_WRAPPER_EXTRA_LIBS=-lpmix + AS_IF([test $opal_pmix_pmix112_happy -eq 1], + [PMIX_VERSION="internal v`$srcdir/$opal_pmix_pmix112_basedir/pmix/config/pmix_get_version.sh $srcdir/$opal_pmix_pmix112_basedir/pmix/VERSION`" + # Build flags for our Makefile.am + opal_pmix_pmix112_LIBS='$(OPAL_TOP_BUILDDIR)/'"$opal_pmix_pmix112_basedir"'/pmix/libpmix.la' + opal_pmix_pmix112_CPPFLAGS='-I$(OPAL_TOP_BUILDDIR)/opal/mca/pmix/pmix112/pmix/include/pmix -I$(OPAL_TOP_BUILDDIR)/opal/mca/pmix/pmix112/pmix/include -I$(OPAL_TOP_BUILDDIR)/opal/mca/pmix/pmix112/pmix -I$(OPAL_TOP_SRCDIR)/opal/mca/pmix/pmix112/pmix' + AC_SUBST([opal_pmix_pmix112_LIBS]) + AC_SUBST([opal_pmix_pmix112_CPPFLAGS])]) - CFLAGS=$opal_pmix_pmix112_save_CFLAGS - CPPFLAGS=$opal_pmix_pmix112_save_CPPFLAGS - LDFLAGS=$opal_pmix_pmix112_save_LDFLAGS - LIBS=$opal_pmix_pmix112_save_LIBS + CFLAGS=$opal_pmix_pmix112_save_CFLAGS + CPPFLAGS=$opal_pmix_pmix112_save_CPPFLAGS + LDFLAGS=$opal_pmix_pmix112_save_LDFLAGS + LIBS=$opal_pmix_pmix112_save_LIBS ]) AS_IF([test $opal_pmix_pmix112_happy -eq 1], diff --git a/opal/mca/pmix/pmix112/pmix/Makefile.am b/opal/mca/pmix/pmix112/pmix/Makefile.am index 300990693c..bd678a59df 100644 --- a/opal/mca/pmix/pmix112/pmix/Makefile.am +++ b/opal/mca/pmix/pmix112/pmix/Makefile.am @@ -57,10 +57,16 @@ include src/server/Makefile.am include src/sec/Makefile.am include src/common/Makefile.am +if PMIX_EMBEDDED_MODE +noinst_LTLIBRARIES = libpmix.la +libpmix_la_SOURCES = $(headers) $(sources) +libpmix_la_LDFLAGS = +else lib_LTLIBRARIES = libpmix.la - libpmix_la_SOURCES = $(headers) $(sources) libpmix_la_LDFLAGS = -version-info $(libpmix_so_version) +endif + if ! PMIX_EMBEDDED_MODE SUBDIRS = . test diff --git a/opal/mca/pmix/pmix112/pmix/include/pmix/rename.h b/opal/mca/pmix/pmix112/pmix/include/pmix/rename.h index 195d143529..7143865813 100644 --- a/opal/mca/pmix/pmix112/pmix/include/pmix/rename.h +++ b/opal/mca/pmix/pmix112/pmix/include/pmix/rename.h @@ -38,255 +38,383 @@ BEGIN_C_DECLS name under the covers. */ /* PMIx APIs */ -#define PMIx_Abort PMIX_NAME_CAPS(Abort) -#define PMIx_Commit PMIX_NAME_CAPS(Commit) -#define PMIx_Connect PMIX_NAME_CAPS(Connect) -#define PMIx_Connect_nb PMIX_NAME_CAPS(Connect_nb) -#define PMIx_Deregister_errhandler PMIX_NAME_CAPS(Deregister_errhandler) -#define PMIx_Disconnect PMIX_NAME_CAPS(Disconnect) -#define PMIx_Disconnect_nb PMIX_NAME_CAPS(Disconnect_nb) -#define PMIx_Error_string PMIX_NAME_CAPS(Error_string) -#define PMIx_Fence PMIX_NAME_CAPS(Fence) -#define PMIx_Fence_nb PMIX_NAME_CAPS(Fence_nb) -#define PMIx_Finalize PMIX_NAME_CAPS(Finalize) -#define PMIx_Get PMIX_NAME_CAPS(Get) -#define PMIx_Get_nb PMIX_NAME_CAPS(Get_nb) -#define PMIx_Get_version PMIX_NAME_CAPS(Get_version) -#define PMIx_Init PMIX_NAME_CAPS(Init) -#define PMIx_Initialized PMIX_NAME_CAPS(Initialized) -#define PMIx_Lookup PMIX_NAME_CAPS(Lookup) -#define PMIx_Lookup_nb PMIX_NAME_CAPS(Lookup_nb) -#define PMIx_Publish PMIX_NAME_CAPS(Publish) -#define PMIx_Publish_nb PMIX_NAME_CAPS(Publish_nb) -#define PMIx_Put PMIX_NAME_CAPS(Put) -#define PMIx_Register_errhandler PMIX_NAME_CAPS(Register_errhandler) -#define PMIx_Resolve_nodes PMIX_NAME_CAPS(Resolve_nodes) -#define PMIx_Resolve_peers PMIX_NAME_CAPS(Resolve_peers) -#define PMIx_Spawn PMIX_NAME_CAPS(Spawn) -#define PMIx_Spawn_nb PMIX_NAME_CAPS(Spawn_nb) -#define PMIx_Unpublish PMIX_NAME_CAPS(Unpublish) -#define PMIx_Unpublish_nb PMIX_NAME_CAPS(Unpublish_nb) +#define PMI2_Abort PMIX_NAME_CAPS(PMI2_Abort) +#define PMI2_Finalize PMIX_NAME_CAPS(PMI2_Finalize) +#define PMI2_Info_GetJobAttr PMIX_NAME_CAPS(PMI2_Info_GetJobAttr) +#define PMI2_Info_GetJobAttrIntArray PMIX_NAME_CAPS(PMI2_Info_GetJobAttrIntArray) +#define PMI2_Info_GetNodeAttr PMIX_NAME_CAPS(PMI2_Info_GetNodeAttr) +#define PMI2_Info_GetSize PMIX_NAME_CAPS(PMI2_Info_GetSize) +#define PMI2_Info_PutNodeAttr PMIX_NAME_CAPS(PMI2_Info_PutNodeAttr) +#define PMI2_Init PMIX_NAME_CAPS(PMI2_Init) +#define PMI2_Initialized PMIX_NAME_CAPS(PMI2_Initialized) +#define PMI2_Job_Connect PMIX_NAME_CAPS(PMI2_Job_Connect) +#define PMI2_Job_Disconnect PMIX_NAME_CAPS(PMI2_Job_Disconnect) +#define PMI2_Job_GetId PMIX_NAME_CAPS(PMI2_Job_GetId) +#define PMI2_Job_GetRank PMIX_NAME_CAPS(PMI2_Job_GetRank) +#define PMI2_Job_Spawn PMIX_NAME_CAPS(PMI2_Job_Spawn) +#define PMI2_KVS_Fence PMIX_NAME_CAPS(PMI2_KVS_Fence) +#define PMI2_KVS_Get PMIX_NAME_CAPS(PMI2_KVS_Get) +#define PMI2_KVS_Put PMIX_NAME_CAPS(PMI2_KVS_Put) +#define PMI2_Nameserv_lookup PMIX_NAME_CAPS(PMI2_Nameserv_lookup) +#define PMI2_Nameserv_publish PMIX_NAME_CAPS(PMI2_Nameserv_publish) +#define PMI2_Nameserv_unpublish PMIX_NAME_CAPS(PMI2_Nameserv_unpublish) +#define PMI_Abort PMIX_NAME_CAPS(PMI_Abort) +#define PMI_Args_to_keyval PMIX_NAME_CAPS(PMI_Args_to_keyval) +#define PMI_Barrier PMIX_NAME_CAPS(PMI_Barrier) +#define PMI_Finalize PMIX_NAME_CAPS(PMI_Finalize) +#define PMI_Free_keyvals PMIX_NAME_CAPS(PMI_Free_keyvals) +#define PMI_Get_appnum PMIX_NAME_CAPS(PMI_Get_appnum) +#define PMI_Get_clique_ranks PMIX_NAME_CAPS(PMI_Get_clique_ranks) +#define PMI_Get_clique_size PMIX_NAME_CAPS(PMI_Get_clique_size) +#define PMI_Get_id PMIX_NAME_CAPS(PMI_Get_id) +#define PMI_Get_id_length_max PMIX_NAME_CAPS(PMI_Get_id_length_max) +#define PMI_Get_kvs_domain_id PMIX_NAME_CAPS(PMI_Get_kvs_domain_id) +#define PMI_Get_options PMIX_NAME_CAPS(PMI_Get_options) +#define PMI_Get_rank PMIX_NAME_CAPS(PMI_Get_rank) +#define PMI_Get_size PMIX_NAME_CAPS(PMI_Get_size) +#define PMI_Get_universe_size PMIX_NAME_CAPS(PMI_Get_universe_size) +#define PMI_Init PMIX_NAME_CAPS(PMI_Init) +#define PMI_Initialized PMIX_NAME_CAPS(PMI_Initialized) +#define PMI_KVS_Commit PMIX_NAME_CAPS(PMI_KVS_Commit) +#define PMI_KVS_Create PMIX_NAME_CAPS(PMI_KVS_Create) +#define PMI_KVS_Destroy PMIX_NAME_CAPS(PMI_KVS_Destroy) +#define PMI_KVS_Get PMIX_NAME_CAPS(PMI_KVS_Get) +#define PMI_KVS_Get_key_length_max PMIX_NAME_CAPS(PMI_KVS_Get_key_length_max) +#define PMI_KVS_Get_my_name PMIX_NAME_CAPS(PMI_KVS_Get_my_name) +#define PMI_KVS_Get_name_length_max PMIX_NAME_CAPS(PMI_KVS_Get_name_length_max) +#define PMI_KVS_Get_value_length_max PMIX_NAME_CAPS(PMI_KVS_Get_value_length_max) +#define PMI_KVS_Iter_first PMIX_NAME_CAPS(PMI_KVS_Iter_first) +#define PMI_KVS_Iter_next PMIX_NAME_CAPS(PMI_KVS_Iter_next) +#define PMI_KVS_Put PMIX_NAME_CAPS(PMI_KVS_Put) +#define PMI_Lookup_name PMIX_NAME_CAPS(PMI_Lookup_name) +#define PMI_Parse_option PMIX_NAME_CAPS(PMI_Parse_option) +#define PMI_Publish_name PMIX_NAME_CAPS(PMI_Publish_name) +#define PMI_Spawn_multiple PMIX_NAME_CAPS(PMI_Spawn_multiple) +#define PMI_Unpublish_name PMIX_NAME_CAPS(PMI_Unpublish_name) +#define PMIx_Abort PMIX_NAME_CAPS(Abort) +#define PMIx_Commit PMIX_NAME_CAPS(Commit) +#define PMIx_Connect PMIX_NAME_CAPS(Connect) +#define PMIx_Connect_nb PMIX_NAME_CAPS(Connect_nb) +#define PMIx_Deregister_errhandler PMIX_NAME_CAPS(Deregister_errhandler) +#define PMIx_Disconnect PMIX_NAME_CAPS(Disconnect) +#define PMIx_Disconnect_nb PMIX_NAME_CAPS(Disconnect_nb) +#define PMIx_Error_string PMIX_NAME_CAPS(Error_string) +#define PMIx_Fence PMIX_NAME_CAPS(Fence) +#define PMIx_Fence_nb PMIX_NAME_CAPS(Fence_nb) +#define PMIx_Finalize PMIX_NAME_CAPS(Finalize) +#define PMIx_Get PMIX_NAME_CAPS(Get) +#define PMIx_Get_nb PMIX_NAME_CAPS(Get_nb) +#define PMIx_Get_version PMIX_NAME_CAPS(Get_version) +#define PMIx_Init PMIX_NAME_CAPS(Init) +#define PMIx_Initialized PMIX_NAME_CAPS(Initialized) +#define PMIx_Lookup PMIX_NAME_CAPS(Lookup) +#define PMIx_Lookup_nb PMIX_NAME_CAPS(Lookup_nb) +#define PMIx_Notify_error PMIX_NAME_CAPS(Notify_error) +#define PMIx_Publish PMIX_NAME_CAPS(Publish) +#define PMIx_Publish_nb PMIX_NAME_CAPS(Publish_nb) +#define PMIx_Put PMIX_NAME_CAPS(Put) +#define PMIx_Register_errhandler PMIX_NAME_CAPS(Register_errhandler) +#define PMIx_Resolve_nodes PMIX_NAME_CAPS(Resolve_nodes) +#define PMIx_Resolve_peers PMIX_NAME_CAPS(Resolve_peers) +#define PMIx_Spawn PMIX_NAME_CAPS(Spawn) +#define PMIx_Spawn_nb PMIX_NAME_CAPS(Spawn_nb) +#define PMIx_Store_internal PMIX_NAME_CAPS(Store_internal) +#define PMIx_Unpublish PMIX_NAME_CAPS(Unpublish) +#define PMIx_Unpublish_nb PMIX_NAME_CAPS(Unpublish_nb) +#define PMIx_generate_ppn PMIX_NAME_CAPS(generate_ppn) +#define PMIx_generate_regex PMIX_NAME_CAPS(generate_regex) +#define PMIx_server_deregister_client PMIX_NAME_CAPS(server_deregister_client) +#define PMIx_server_deregister_nspace PMIX_NAME_CAPS(server_deregister_nspace) +#define PMIx_server_dmodex_request PMIX_NAME_CAPS(server_dmodex_request) +#define PMIx_server_finalize PMIX_NAME_CAPS(server_finalize) +#define PMIx_server_init PMIX_NAME_CAPS(server_init) +#define PMIx_server_register_client PMIX_NAME_CAPS(server_register_client) +#define PMIx_server_register_nspace PMIX_NAME_CAPS(server_register_nspace) +#define PMIx_server_setup_fork PMIX_NAME_CAPS(server_setup_fork) - -/* internal client functions */ -#define pmix_client_process_nspace_blob PMIX_NAME(client_process_nspace_blob) - - -/* src/util directory */ -#define pmix_argv_append PMIX_NAME(argv_append) -#define pmix_argv_append_nosize PMIX_NAME(argv_append_nosize) -#define pmix_argv_append_unique_nosize PMIX_NAME(argv_append_unique_nosize) -#define pmix_argv_copy PMIX_NAME(argv_copy) -#define pmix_argv_count PMIX_NAME(argv_count) -#define pmix_argv_delete PMIX_NAME(argv_delete) -#define pmix_argv_free PMIX_NAME(argv_free) -#define pmix_argv_insert PMIX_NAME(argv_insert) -#define pmix_argv_insert_element PMIX_NAME(argv_insert_element) -#define pmix_argv_join PMIX_NAME(argv_join) -#define pmix_argv_join_range PMIX_NAME(argv_join_range) -#define pmix_argv_len PMIX_NAME(argv_len) -#define pmix_argv_prepend_nosize PMIX_NAME(argv_prepend_nosize) -#define pmix_argv_split PMIX_NAME(argv_split) -#define pmix_argv_split_with_empty PMIX_NAME(argv_split_with_empty) -#define pmix_asprintf PMIX_NAME(asprintf) -#define pmix_basename PMIX_NAME(basename) -#define pmix_bcopy_csum_partial PMIX_NAME(bcopy_csum_partial) -#define pmix_bcopy_uicrc_partial PMIX_NAME(bcopy_uicrc_partial) -#define pmix_bcopy_uicsum_partial PMIX_NAME(bcopy_uicsum_partial) -#define pmix_csum_partial PMIX_NAME(csum_partial) -#define pmix_dirname PMIX_NAME(dirname) -#define pmix_environ_merge PMIX_NAME(environ_merge) -#define pmix_errhandler_invoke PMIX_NAME(errhandler_invoke) -#define pmix_fd_read PMIX_NAME(fd_read) -#define pmix_fd_set_cloexec PMIX_NAME(fd_set_cloexec) -#define pmix_fd_write PMIX_NAME(fd_write) -#define pmix_home_directory PMIX_NAME(home_directory) -#define pmix_initialize_crc_table PMIX_NAME(initialize_crc_table) -#define pmix_os_path PMIX_NAME(os_path) -#define pmix_output PMIX_NAME(output) -#define pmix_output_close PMIX_NAME(output_close) -#define pmix_output_finalize PMIX_NAME(output_finalize) -#define pmix_output_get_verbosity PMIX_NAME(output_get_verbosity) -#define pmix_output_init PMIX_NAME(output_init) -#define pmix_output_open PMIX_NAME(output_open) -#define pmix_output_reopen PMIX_NAME(output_reopen) -#define pmix_output_reopen_all PMIX_NAME(output_reopen_all) -#define pmix_output_set_output_file_info PMIX_NAME(output_set_output_file_info) -#define pmix_output_set_verbosity PMIX_NAME(output_set_verbosity) -#define pmix_output_string PMIX_NAME(output_string) -#define pmix_output_switch PMIX_NAME(output_switch) -#define pmix_output_verbose PMIX_NAME(output_verbose) -#define pmix_output_vstring PMIX_NAME(output_vstring) -#define pmix_output_vverbose PMIX_NAME(output_vverbose) -#define pmix_setenv PMIX_NAME(setenv) -#define pmix_snprintf PMIX_NAME(snprintf) -#define pmix_start_progress_thread PMIX_NAME(start_progress_thread) -#define pmix_stop_progress_thread PMIX_NAME(stop_progress_thread) -#define pmix_tmp_directory PMIX_NAME(tmp_directory) -#define pmix_uicrc_partial PMIX_NAME(uicrc_partial) -#define pmix_uicsum_partial PMIX_NAME(uicsum_partial) -#define pmix_unsetenv PMIX_NAME(unsetenv) -#define pmix_vasprintf PMIX_NAME(vasprintf) -#define pmix_vsnprintf PMIX_NAME(vsnprintf) - - -/* buffer operations */ -#define pmix_bfrop_buffer_extend PMIX_NAME(bfrop_buffer_extend) -#define pmix_bfrop_close PMIX_NAME(bfrop_close) -#define pmix_bfrop_copy PMIX_NAME(bfrop_copy) -#define pmix_bfrop_copy_app PMIX_NAME(bfrop_copy_app) -#define pmix_bfrop_copy_array PMIX_NAME(bfrop_copy_array) -#define pmix_bfrop_copy_bo PMIX_NAME(bfrop_copy_bo) -#define pmix_bfrop_copy_buf PMIX_NAME(bfrop_copy_buf) -#define pmix_bfrop_copy_info PMIX_NAME(bfrop_copy_info) -#define pmix_bfrop_copy_kval PMIX_NAME(bfrop_copy_kval) -#define pmix_bfrop_copy_modex PMIX_NAME(bfrop_copy_modex) -#define pmix_bfrop_copy_payload PMIX_NAME(bfrop_copy_payload) -#define pmix_bfrop_copy_pdata PMIX_NAME(bfrop_copy_pdata) -#define pmix_bfrop_copy_persist PMIX_NAME(bfrop_copy_persist) -#define pmix_bfrop_copy_proc PMIX_NAME(bfrop_copy_proc) -#define pmix_bfrop_copy_string PMIX_NAME(bfrop_copy_string) -#define pmix_bfrop_copy_value PMIX_NAME(bfrop_copy_value) -#define pmix_bfrop_get_data_type PMIX_NAME(bfrop_get_data_type) -#define pmix_bfrop_open PMIX_NAME(bfrop_open) -#define pmix_bfrop_pack PMIX_NAME(bfrop_pack) -#define pmix_bfrop_pack_app PMIX_NAME(bfrop_pack_app) -#define pmix_bfrop_pack_array PMIX_NAME(bfrop_pack_array) -#define pmix_bfrop_pack_bo PMIX_NAME(bfrop_pack_bo) -#define pmix_bfrop_pack_buf PMIX_NAME(bfrop_pack_buf) -#define pmix_bfrop_pack_buffer PMIX_NAME(bfrop_pack_buffer) -#define pmix_bfrop_pack_byte PMIX_NAME(bfrop_pack_byte) -#define pmix_bfrop_pack_datatype PMIX_NAME(bfrop_pack_datatype) -#define pmix_bfrop_pack_double PMIX_NAME(bfrop_pack_double) -#define pmix_bfrop_pack_float PMIX_NAME(bfrop_pack_float) -#define pmix_bfrop_pack_info PMIX_NAME(bfrop_pack_info) -#define pmix_bfrop_pack_int PMIX_NAME(bfrop_pack_int) -#define pmix_bfrop_pack_int16 PMIX_NAME(bfrop_pack_int16) -#define pmix_bfrop_pack_int32 PMIX_NAME(bfrop_pack_int32) -#define pmix_bfrop_pack_int64 PMIX_NAME(bfrop_pack_int64) -#define pmix_bfrop_pack_kval PMIX_NAME(bfrop_pack_kval) -#define pmix_bfrop_pack_modex PMIX_NAME(bfrop_pack_modex) -#define pmix_bfrop_pack_pdata PMIX_NAME(bfrop_pack_pdata) -#define pmix_bfrop_pack_persist PMIX_NAME(bfrop_pack_persist) -#define pmix_bfrop_pack_pid PMIX_NAME(bfrop_pack_pid) -#define pmix_bfrop_pack_proc PMIX_NAME(bfrop_pack_proc) -#define pmix_bfrop_pack_sizet PMIX_NAME(bfrop_pack_sizet) -#define pmix_bfrop_pack_string PMIX_NAME(bfrop_pack_string) -#define pmix_bfrop_pack_time PMIX_NAME(bfrop_pack_time) -#define pmix_bfrop_pack_timeval PMIX_NAME(bfrop_pack_timeval) -#define pmix_bfrop_pack_value PMIX_NAME(bfrop_pack_value) -#define pmix_bfrop_print PMIX_NAME(bfrop_print) -#define pmix_bfrop_print_app PMIX_NAME(bfrop_print_app) -#define pmix_bfrop_print_array PMIX_NAME(bfrop_print_array) -#define pmix_bfrop_print_bo PMIX_NAME(bfrop_print_bo) -#define pmix_bfrop_print_buf PMIX_NAME(bfrop_print_buf) -#define pmix_bfrop_print_byte PMIX_NAME(bfrop_print_byte) -#define pmix_bfrop_print_double PMIX_NAME(bfrop_print_double) -#define pmix_bfrop_print_float PMIX_NAME(bfrop_print_float) -#define pmix_bfrop_print_info PMIX_NAME(bfrop_print_info) -#define pmix_bfrop_print_int PMIX_NAME(bfrop_print_int) -#define pmix_bfrop_print_int16 PMIX_NAME(bfrop_print_int16) -#define pmix_bfrop_print_int32 PMIX_NAME(bfrop_print_int32) -#define pmix_bfrop_print_int64 PMIX_NAME(bfrop_print_int64) -#define pmix_bfrop_print_int8 PMIX_NAME(bfrop_print_int8) -#define pmix_bfrop_print_kval PMIX_NAME(bfrop_print_kval) -#define pmix_bfrop_print_modex PMIX_NAME(bfrop_print_modex) -#define pmix_bfrop_print_pdata PMIX_NAME(bfrop_print_pdata) -#define pmix_bfrop_print_persist PMIX_NAME(bfrop_print_persist) -#define pmix_bfrop_print_pid PMIX_NAME(bfrop_print_pid) -#define pmix_bfrop_print_proc PMIX_NAME(bfrop_print_proc) -#define pmix_bfrop_print_size PMIX_NAME(bfrop_print_size) -#define pmix_bfrop_print_string PMIX_NAME(bfrop_print_string) -#define pmix_bfrop_print_time PMIX_NAME(bfrop_print_time) -#define pmix_bfrop_print_timeval PMIX_NAME(bfrop_print_timeval) -#define pmix_bfrop_print_uint PMIX_NAME(bfrop_print_uint) -#define pmix_bfrop_print_uint16 PMIX_NAME(bfrop_print_uint16) -#define pmix_bfrop_print_uint32 PMIX_NAME(bfrop_print_uint32) -#define pmix_bfrop_print_uint64 PMIX_NAME(bfrop_print_uint64) -#define pmix_bfrop_print_uint8 PMIX_NAME(bfrop_print_uint8) -#define pmix_bfrop_print_value PMIX_NAME(bfrop_print_value) -#define pmix_bfrop_std_copy PMIX_NAME(bfrop_std_copy) -#define pmix_bfrop_store_data_type PMIX_NAME(bfrop_store_data_type) -#define pmix_bfrop_too_small PMIX_NAME(bfrop_too_small) -#define pmix_bfrop_unpack PMIX_NAME(bfrop_unpack) -#define pmix_bfrop_unpack_app PMIX_NAME(bfrop_unpack_app) -#define pmix_bfrop_unpack_array PMIX_NAME(bfrop_unpack_array) -#define pmix_bfrop_unpack_bo PMIX_NAME(bfrop_unpack_bo) -#define pmix_bfrop_unpack_buf PMIX_NAME(bfrop_unpack_buf) -#define pmix_bfrop_unpack_buffer PMIX_NAME(bfrop_unpack_buffer) -#define pmix_bfrop_unpack_byte PMIX_NAME(bfrop_unpack_byte) -#define pmix_bfrop_unpack_datatype PMIX_NAME(bfrop_unpack_datatype) -#define pmix_bfrop_unpack_double PMIX_NAME(bfrop_unpack_double) -#define pmix_bfrop_unpack_float PMIX_NAME(bfrop_unpack_float) -#define pmix_bfrop_unpack_info PMIX_NAME(bfrop_unpack_info) -#define pmix_bfrop_unpack_int PMIX_NAME(bfrop_unpack_int) -#define pmix_bfrop_unpack_int16 PMIX_NAME(bfrop_unpack_int16) -#define pmix_bfrop_unpack_int32 PMIX_NAME(bfrop_unpack_int32) -#define pmix_bfrop_unpack_int64 PMIX_NAME(bfrop_unpack_int64) -#define pmix_bfrop_unpack_kval PMIX_NAME(bfrop_unpack_kval) -#define pmix_bfrop_unpack_modex PMIX_NAME(bfrop_unpack_modex) -#define pmix_bfrop_unpack_pdata PMIX_NAME(bfrop_unpack_pdata) -#define pmix_bfrop_unpack_persist PMIX_NAME(bfrop_unpack_persist) -#define pmix_bfrop_unpack_pid PMIX_NAME(bfrop_unpack_pid) -#define pmix_bfrop_unpack_proc PMIX_NAME(bfrop_unpack_proc) -#define pmix_bfrop_unpack_sizet PMIX_NAME(bfrop_unpack_sizet) -#define pmix_bfrop_unpack_string PMIX_NAME(bfrop_unpack_string) -#define pmix_bfrop_unpack_time PMIX_NAME(bfrop_unpack_time) -#define pmix_bfrop_unpack_timeval PMIX_NAME(bfrop_unpack_timeval) -#define pmix_bfrop_unpack_value PMIX_NAME(bfrop_unpack_value) -#define pmix_value_load PMIX_NAME(value_load) -#define pmix_value_unload PMIX_NAME(value_unload) -#define pmix_value_xfer PMIX_NAME(value_xfer) - - -/* class system */ -#define pmix_class_finalize PMIX_NAME(class_finalize) -#define pmix_class_initialize PMIX_NAME(class_initialize) -#define pmix_hash_fetch PMIX_NAME(hash_fetch) -#define pmix_hash_remove_data PMIX_NAME(hash_remove_data) -#define pmix_hash_store PMIX_NAME(hash_store) -#define pmix_hash_table_get_first_key_uint32 PMIX_NAME(hash_table_get_first_key_uint32) -#define pmix_hash_table_get_first_key_uint64 PMIX_NAME(hash_table_get_first_key_uint64) -#define pmix_hash_table_get_next_key_uint32 PMIX_NAME(hash_table_get_next_key_uint32) -#define pmix_hash_table_get_next_key_uint64 PMIX_NAME(hash_table_get_next_key_uint64) -#define pmix_hash_table_get_value_ptr PMIX_NAME(hash_table_get_value_ptr) -#define pmix_hash_table_get_value_uint32 PMIX_NAME(hash_table_get_value_uint32) -#define pmix_hash_table_get_value_uint64 PMIX_NAME(hash_table_get_value_uint64) -#define pmix_hash_table_init PMIX_NAME(hash_table_init) -#define pmix_hash_table_remove_all PMIX_NAME(hash_table_remove_all) -#define pmix_hash_table_remove_value_ptr PMIX_NAME(hash_table_remove_value_ptr) -#define pmix_hash_table_remove_value_uint32 PMIX_NAME(hash_table_remove_value_uint32) -#define pmix_hash_table_remove_value_uint64 PMIX_NAME(hash_table_remove_value_uint64) -#define pmix_hash_table_set_value_ptr PMIX_NAME(hash_table_set_value_ptr) -#define pmix_hash_table_set_value_uint32 PMIX_NAME(hash_table_set_value_uint32) -#define pmix_hash_table_set_value_uint64 PMIX_NAME(hash_table_set_value_uint64) -#define pmix_list_insert PMIX_NAME(list_insert) -#define pmix_list_join PMIX_NAME(list_join) -#define pmix_list_sort PMIX_NAME(list_sort) -#define pmix_list_splice PMIX_NAME(list_splice) -#define pmix_pointer_array_add PMIX_NAME(pointer_array_add) -#define pmix_pointer_array_init PMIX_NAME(pointer_array_init) -#define pmix_pointer_array_set_item PMIX_NAME(pointer_array_set_item) -#define pmix_pointer_array_set_size PMIX_NAME(pointer_array_set_size) -#define pmix_pointer_array_test_and_set_item PMIX_NAME(pointer_array_test_and_set_item) - - -/* security system */ -#define pmix_sec_finalize PMIX_NAME(sec_finalize) -#define pmix_sec_init PMIX_NAME(sec_init) - - -/* usock messaging system */ -#define pmix_usock_finalize PMIX_NAME(usock_finalize) -#define pmix_usock_init PMIX_NAME(usock_init) -#define pmix_usock_process_msg PMIX_NAME(usock_process_msg) -#define pmix_usock_recv_blocking PMIX_NAME(usock_recv_blocking) -#define pmix_usock_recv_handler PMIX_NAME(usock_recv_handler) -#define pmix_usock_send_blocking PMIX_NAME(usock_send_blocking) -#define pmix_usock_send_handler PMIX_NAME(usock_send_handler) -#define pmix_usock_send_recv PMIX_NAME(usock_send_recv) -#define pmix_usock_set_blocking PMIX_NAME(usock_set_blocking) -#define pmix_usock_set_nonblocking PMIX_NAME(usock_set_nonblocking) +/* internal functions */ +#define pmix_argv_append PMIX_NAME(argv_append) +#define pmix_argv_append_nosize PMIX_NAME(argv_append_nosize) +#define pmix_argv_append_unique_nosize PMIX_NAME(argv_append_unique_nosize) +#define pmix_argv_copy PMIX_NAME(argv_copy) +#define pmix_argv_count PMIX_NAME(argv_count) +#define pmix_argv_delete PMIX_NAME(argv_delete) +#define pmix_argv_free PMIX_NAME(argv_free) +#define pmix_argv_insert PMIX_NAME(argv_insert) +#define pmix_argv_insert_element PMIX_NAME(argv_insert_element) +#define pmix_argv_join PMIX_NAME(argv_join) +#define pmix_argv_join_range PMIX_NAME(argv_join_range) +#define pmix_argv_len PMIX_NAME(argv_len) +#define pmix_argv_prepend_nosize PMIX_NAME(argv_prepend_nosize) +#define pmix_argv_split PMIX_NAME(argv_split) +#define pmix_argv_split_with_empty PMIX_NAME(argv_split_with_empty) +#define pmix_asprintf PMIX_NAME(asprintf) +#define pmix_basename PMIX_NAME(basename) +#define pmix_bcopy_csum_partial PMIX_NAME(bcopy_csum_partial) +#define pmix_bcopy_uicrc_partial PMIX_NAME(bcopy_uicrc_partial) +#define pmix_bcopy_uicsum_partial PMIX_NAME(bcopy_uicsum_partial) +#define pmix_bfrop PMIX_NAME(bfrop) +#define pmix_bfrop_buffer_extend PMIX_NAME(bfrop_buffer_extend) +#define pmix_bfrop_close PMIX_NAME(bfrop_close) +#define pmix_bfrop_copy PMIX_NAME(bfrop_copy) +#define pmix_bfrop_copy_app PMIX_NAME(bfrop_copy_app) +#define pmix_bfrop_copy_array PMIX_NAME(bfrop_copy_array) +#define pmix_bfrop_copy_bo PMIX_NAME(bfrop_copy_bo) +#define pmix_bfrop_copy_buf PMIX_NAME(bfrop_copy_buf) +#define pmix_bfrop_copy_info PMIX_NAME(bfrop_copy_info) +#define pmix_bfrop_copy_kval PMIX_NAME(bfrop_copy_kval) +#define pmix_bfrop_copy_modex PMIX_NAME(bfrop_copy_modex) +#define pmix_bfrop_copy_payload PMIX_NAME(bfrop_copy_payload) +#define pmix_bfrop_copy_pdata PMIX_NAME(bfrop_copy_pdata) +#define pmix_bfrop_copy_persist PMIX_NAME(bfrop_copy_persist) +#define pmix_bfrop_copy_proc PMIX_NAME(bfrop_copy_proc) +#define pmix_bfrop_copy_string PMIX_NAME(bfrop_copy_string) +#define pmix_bfrop_copy_topo PMIX_NAME(bfrop_copy_topo) +#define pmix_bfrop_copy_value PMIX_NAME(bfrop_copy_value) +#define pmix_bfrop_get_data_type PMIX_NAME(bfrop_get_data_type) +#define pmix_bfrop_initial_size PMIX_NAME(pmix_bfrop_initial_size) +#define pmix_bfrop_initialized PMIX_NAME(bfrop_initialized) +#define pmix_bfrop_num_reg_types PMIX_NAME(pmix_bfrop_num_reg_types) +#define pmix_bfrop_open PMIX_NAME(bfrop_open) +#define pmix_bfrop_pack PMIX_NAME(bfrop_pack) +#define pmix_bfrop_pack_app PMIX_NAME(bfrop_pack_app) +#define pmix_bfrop_pack_array PMIX_NAME(bfrop_pack_array) +#define pmix_bfrop_pack_bo PMIX_NAME(bfrop_pack_bo) +#define pmix_bfrop_pack_bool PMIX_NAME(bfrop_pack_bool) +#define pmix_bfrop_pack_buf PMIX_NAME(bfrop_pack_buf) +#define pmix_bfrop_pack_buffer PMIX_NAME(bfrop_pack_buffer) +#define pmix_bfrop_pack_byte PMIX_NAME(bfrop_pack_byte) +#define pmix_bfrop_pack_datatype PMIX_NAME(bfrop_pack_datatype) +#define pmix_bfrop_pack_double PMIX_NAME(bfrop_pack_double) +#define pmix_bfrop_pack_float PMIX_NAME(bfrop_pack_float) +#define pmix_bfrop_pack_info PMIX_NAME(bfrop_pack_info) +#define pmix_bfrop_pack_int PMIX_NAME(bfrop_pack_int) +#define pmix_bfrop_pack_int16 PMIX_NAME(bfrop_pack_int16) +#define pmix_bfrop_pack_int32 PMIX_NAME(bfrop_pack_int32) +#define pmix_bfrop_pack_int64 PMIX_NAME(bfrop_pack_int64) +#define pmix_bfrop_pack_kval PMIX_NAME(bfrop_pack_kval) +#define pmix_bfrop_pack_modex PMIX_NAME(bfrop_pack_modex) +#define pmix_bfrop_pack_pdata PMIX_NAME(bfrop_pack_pdata) +#define pmix_bfrop_pack_persist PMIX_NAME(bfrop_pack_persist) +#define pmix_bfrop_pack_pid PMIX_NAME(bfrop_pack_pid) +#define pmix_bfrop_pack_proc PMIX_NAME(bfrop_pack_proc) +#define pmix_bfrop_pack_sizet PMIX_NAME(bfrop_pack_sizet) +#define pmix_bfrop_pack_string PMIX_NAME(bfrop_pack_string) +#define pmix_bfrop_pack_time PMIX_NAME(bfrop_pack_time) +#define pmix_bfrop_pack_timeval PMIX_NAME(bfrop_pack_timeval) +#define pmix_bfrop_pack_topo PMIX_NAME(bfrop_pack_topo) +#define pmix_bfrop_pack_value PMIX_NAME(bfrop_pack_value) +#define pmix_bfrop_print PMIX_NAME(bfrop_print) +#define pmix_bfrop_print_app PMIX_NAME(bfrop_print_app) +#define pmix_bfrop_print_array PMIX_NAME(bfrop_print_array) +#define pmix_bfrop_print_bo PMIX_NAME(bfrop_print_bo) +#define pmix_bfrop_print_bool PMIX_NAME(bfrop_print_bool) +#define pmix_bfrop_print_buf PMIX_NAME(bfrop_print_buf) +#define pmix_bfrop_print_byte PMIX_NAME(bfrop_print_byte) +#define pmix_bfrop_print_double PMIX_NAME(bfrop_print_double) +#define pmix_bfrop_print_float PMIX_NAME(bfrop_print_float) +#define pmix_bfrop_print_info PMIX_NAME(bfrop_print_info) +#define pmix_bfrop_print_int PMIX_NAME(bfrop_print_int) +#define pmix_bfrop_print_int16 PMIX_NAME(bfrop_print_int16) +#define pmix_bfrop_print_int32 PMIX_NAME(bfrop_print_int32) +#define pmix_bfrop_print_int64 PMIX_NAME(bfrop_print_int64) +#define pmix_bfrop_print_int8 PMIX_NAME(bfrop_print_int8) +#define pmix_bfrop_print_kval PMIX_NAME(bfrop_print_kval) +#define pmix_bfrop_print_modex PMIX_NAME(bfrop_print_modex) +#define pmix_bfrop_print_pdata PMIX_NAME(bfrop_print_pdata) +#define pmix_bfrop_print_persist PMIX_NAME(bfrop_print_persist) +#define pmix_bfrop_print_pid PMIX_NAME(bfrop_print_pid) +#define pmix_bfrop_print_proc PMIX_NAME(bfrop_print_proc) +#define pmix_bfrop_print_size PMIX_NAME(bfrop_print_size) +#define pmix_bfrop_print_string PMIX_NAME(bfrop_print_string) +#define pmix_bfrop_print_time PMIX_NAME(bfrop_print_time) +#define pmix_bfrop_print_timeval PMIX_NAME(bfrop_print_timeval) +#define pmix_bfrop_print_topo PMIX_NAME(bfrop_print_topo) +#define pmix_bfrop_print_uint PMIX_NAME(bfrop_print_uint) +#define pmix_bfrop_print_uint16 PMIX_NAME(bfrop_print_uint16) +#define pmix_bfrop_print_uint32 PMIX_NAME(bfrop_print_uint32) +#define pmix_bfrop_print_uint64 PMIX_NAME(bfrop_print_uint64) +#define pmix_bfrop_print_uint8 PMIX_NAME(bfrop_print_uint8) +#define pmix_bfrop_print_value PMIX_NAME(bfrop_print_value) +#define pmix_bfrop_std_copy PMIX_NAME(bfrop_std_copy) +#define pmix_bfrop_store_data_type PMIX_NAME(bfrop_store_data_type) +#define pmix_bfrop_threshold_size PMIX_NAME(pmix_bfrop_threshold_size) +#define pmix_bfrop_too_small PMIX_NAME(bfrop_too_small) +#define pmix_bfrop_types PMIX_NAME(bfrop_types) +#define pmix_bfrop_type_info_t_class PMIX_NAME(bfrop_type_info_t_class) +#define pmix_bfrop_unpack PMIX_NAME(bfrop_unpack) +#define pmix_bfrop_unpack_app PMIX_NAME(bfrop_unpack_app) +#define pmix_bfrop_unpack_array PMIX_NAME(bfrop_unpack_array) +#define pmix_bfrop_unpack_bo PMIX_NAME(bfrop_unpack_bo) +#define pmix_bfrop_unpack_bool PMIX_NAME(bfrop_unpack_bool) +#define pmix_bfrop_unpack_buf PMIX_NAME(bfrop_unpack_buf) +#define pmix_bfrop_unpack_buffer PMIX_NAME(bfrop_unpack_buffer) +#define pmix_bfrop_unpack_byte PMIX_NAME(bfrop_unpack_byte) +#define pmix_bfrop_unpack_datatype PMIX_NAME(bfrop_unpack_datatype) +#define pmix_bfrop_unpack_double PMIX_NAME(bfrop_unpack_double) +#define pmix_bfrop_unpack_float PMIX_NAME(bfrop_unpack_float) +#define pmix_bfrop_unpack_info PMIX_NAME(bfrop_unpack_info) +#define pmix_bfrop_unpack_int PMIX_NAME(bfrop_unpack_int) +#define pmix_bfrop_unpack_int16 PMIX_NAME(bfrop_unpack_int16) +#define pmix_bfrop_unpack_int32 PMIX_NAME(bfrop_unpack_int32) +#define pmix_bfrop_unpack_int64 PMIX_NAME(bfrop_unpack_int64) +#define pmix_bfrop_unpack_kval PMIX_NAME(bfrop_unpack_kval) +#define pmix_bfrop_unpack_modex PMIX_NAME(bfrop_unpack_modex) +#define pmix_bfrop_unpack_pdata PMIX_NAME(bfrop_unpack_pdata) +#define pmix_bfrop_unpack_persist PMIX_NAME(bfrop_unpack_persist) +#define pmix_bfrop_unpack_pid PMIX_NAME(bfrop_unpack_pid) +#define pmix_bfrop_unpack_proc PMIX_NAME(bfrop_unpack_proc) +#define pmix_bfrop_unpack_sizet PMIX_NAME(bfrop_unpack_sizet) +#define pmix_bfrop_unpack_string PMIX_NAME(bfrop_unpack_string) +#define pmix_bfrop_unpack_time PMIX_NAME(bfrop_unpack_time) +#define pmix_bfrop_unpack_timeval PMIX_NAME(bfrop_unpack_timeval) +#define pmix_bfrop_unpack_topo PMIX_NAME(bfrop_unpack_topo) +#define pmix_bfrop_unpack_value PMIX_NAME(bfrop_unpack_value) +#define pmix_buffer_t_class PMIX_NAME(buffer_t_class) +#define pmix_cb_t_class PMIX_NAME(cb_t_class) +#define pmix_class_finalize PMIX_NAME(class_finalize) +#define pmix_class_initialize PMIX_NAME(class_initialize) +#define pmix_client_globals PMIX_NAME(pmix_client_globals) +#define pmix_client_process_nspace_blob PMIX_NAME(client_process_nspace_blob) +#define pmix_csum_partial PMIX_NAME(csum_partial) +#define pmix_dirname PMIX_NAME(dirname) +#define pmix_dmdx_local_t_class PMIX_NAME(dmdx_local_t_class) +#define pmix_dmdx_remote_t_class PMIX_NAME(dmdx_remote_t_class) +#define pmix_dmdx_reply_caddy_t_class PMIX_NAME(dmdx_reply_caddy_t_class) +#define pmix_dmdx_request_t_class PMIX_NAME(dmdx_request_t_class) +#define pmix_environ_merge PMIX_NAME(environ_merge) +#define pmix_errhandler_invoke PMIX_NAME(errhandler_invoke) +#define pmix_fd_read PMIX_NAME(fd_read) +#define pmix_fd_set_cloexec PMIX_NAME(fd_set_cloexec) +#define pmix_fd_write PMIX_NAME(fd_write) +#define pmix_globals PMIX_NAME(globals) +#define pmix_globals_finalize PMIX_NAME(globals_finalize) +#define pmix_globals_init PMIX_NAME(globals_init) +#define pmix_hash_fetch PMIX_NAME(hash_fetch) +#define pmix_hash_remove_data PMIX_NAME(hash_remove_data) +#define pmix_hash_store PMIX_NAME(hash_store) +#define pmix_hash_table_get_first_key_uint32 PMIX_NAME(hash_table_get_first_key_uint32) +#define pmix_hash_table_get_first_key_uint64 PMIX_NAME(hash_table_get_first_key_uint64) +#define pmix_hash_table_get_next_key_uint32 PMIX_NAME(hash_table_get_next_key_uint32) +#define pmix_hash_table_get_next_key_uint64 PMIX_NAME(hash_table_get_next_key_uint64) +#define pmix_hash_table_get_value_ptr PMIX_NAME(hash_table_get_value_ptr) +#define pmix_hash_table_get_value_uint32 PMIX_NAME(hash_table_get_value_uint32) +#define pmix_hash_table_get_value_uint64 PMIX_NAME(hash_table_get_value_uint64) +#define pmix_hash_table_init PMIX_NAME(hash_table_init) +#define pmix_hash_table_remove_all PMIX_NAME(hash_table_remove_all) +#define pmix_hash_table_remove_value_ptr PMIX_NAME(hash_table_remove_value_ptr) +#define pmix_hash_table_remove_value_uint32 PMIX_NAME(hash_table_remove_value_uint32) +#define pmix_hash_table_remove_value_uint64 PMIX_NAME(hash_table_remove_value_uint64) +#define pmix_hash_table_set_value_ptr PMIX_NAME(hash_table_set_value_ptr) +#define pmix_hash_table_set_value_uint32 PMIX_NAME(hash_table_set_value_uint32) +#define pmix_hash_table_set_value_uint64 PMIX_NAME(hash_table_set_value_uint64) +#define pmix_hash_table_t_class PMIX_NAME(hash_table_t_class) +#define pmix_home_directory PMIX_NAME(home_directory) +#define pmix_host_server PMIX_NAME(pmix_host_server) +#define pmix_initialize_crc_table PMIX_NAME(initialize_crc_table) +#define pmix_kval_t_class PMIX_NAME(kval_t_class) +#define pmix_list_insert PMIX_NAME(list_insert) +#define pmix_list_item_t_class PMIX_NAME(list_item_t_class) +#define pmix_list_join PMIX_NAME(list_join) +#define pmix_list_sort PMIX_NAME(list_sort) +#define pmix_list_splice PMIX_NAME(list_splice) +#define pmix_list_t_class PMIX_NAME(list_t_class) +#define pmix_munge_module PMIX_NAME(munge_module) +#define pmix_native_module PMIX_NAME(native_module) +#define pmix_notify_caddy_t_class PMIX_NAME(notify_caddy_t_class) +#define pmix_nrec_t_class PMIX_NAME(nrec_t_class) +#define pmix_nspace_t_class PMIX_NAME(nspace_t_class) +#define pmix_object_t_class PMIX_NAME(object_t_class) +#define pmix_os_path PMIX_NAME(os_path) +#define pmix_output PMIX_NAME(output) +#define pmix_output_close PMIX_NAME(output_close) +#define pmix_output_finalize PMIX_NAME(output_finalize) +#define pmix_output_get_verbosity PMIX_NAME(output_get_verbosity) +#define pmix_output_init PMIX_NAME(output_init) +#define pmix_output_open PMIX_NAME(output_open) +#define pmix_output_redirected_syslog_pri PMIX_NAME(pmix_output_redirected_syslog_pri) +#define pmix_output_redirected_to_syslog PMIX_NAME(output_redirected_to_syslog) +#define pmix_output_reopen PMIX_NAME(output_reopen) +#define pmix_output_reopen_all PMIX_NAME(output_reopen_all) +#define pmix_output_set_output_file_info PMIX_NAME(output_set_output_file_info) +#define pmix_output_set_verbosity PMIX_NAME(output_set_verbosity) +#define pmix_output_stream_t_class PMIX_NAME(output_stream_t_class) +#define pmix_output_string PMIX_NAME(output_string) +#define pmix_output_switch PMIX_NAME(output_switch) +#define pmix_output_verbose PMIX_NAME(output_verbose) +#define pmix_output_vstring PMIX_NAME(output_vstring) +#define pmix_output_vverbose PMIX_NAME(output_vverbose) +#define pmix_pack_proc_map PMIX_NAME(pack_proc_map) +#define pmix_peer_t_class PMIX_NAME(peer_t_class) +#define pmix_pending_connection_t_class PMIX_NAME(pending_connection_t_class) +#define pmix_pending_nspace_requests PMIX_NAME(pending_nspace_requests) +#define pmix_pending_resolve PMIX_NAME(pending_resolve) +#define pmix_pointer_array_add PMIX_NAME(pointer_array_add) +#define pmix_pointer_array_init PMIX_NAME(pointer_array_init) +#define pmix_pointer_array_set_item PMIX_NAME(pointer_array_set_item) +#define pmix_pointer_array_set_size PMIX_NAME(pointer_array_set_size) +#define pmix_pointer_array_t_class PMIX_NAME(pointer_array_t_class) +#define pmix_pointer_array_test_and_set_item PMIX_NAME(pointer_array_test_and_set_item) +#define pmix_rank_info_t_class PMIX_NAME(rank_info_t_class) +#define pmix_regex_parse_nodes PMIX_NAME(regex_parse_nodes) +#define pmix_regex_parse_procs PMIX_NAME(regex_parse_procs) +#define pmix_regex_range_t_class PMIX_NAME(regex_range_t_class) +#define pmix_regex_value_t_class PMIX_NAME(regex_value_t_class) +#define pmix_sec PMIX_NAME(pmix_sec) +#define pmix_sec_finalize PMIX_NAME(sec_finalize) +#define pmix_sec_init PMIX_NAME(sec_init) +#define pmix_server_abort PMIX_NAME(server_abort) +#define pmix_server_caddy_t_class PMIX_NAME(server_caddy_t_class) +#define pmix_server_commit PMIX_NAME(server_commit) +#define pmix_server_connect PMIX_NAME(server_connect) +#define pmix_server_deregister_errhandler PMIX_NAME(server_deregister_errhandler) +#define pmix_server_fence PMIX_NAME(server_fence) +#define pmix_server_get PMIX_NAME(server_get) +#define pmix_server_globals PMIX_NAME(pmix_server_globals) +#define pmix_server_lookup PMIX_NAME(server_lookup) +#define pmix_server_notify_error PMIX_NAME(server_notify_error) +#define pmix_server_nspace_t_class PMIX_NAME(server_nspace_t_class) +#define pmix_server_publish PMIX_NAME(server_publish) +#define pmix_server_register_errhandler PMIX_NAME(server_register_errhandler) +#define pmix_server_spawn PMIX_NAME(server_spawn) +#define pmix_server_trkr_t_class PMIX_NAME(server_trkr_t_class) +#define pmix_server_unpublish PMIX_NAME(server_unpublish) +#define pmix_setenv PMIX_NAME(setenv) +#define pmix_setup_caddy_t_class PMIX_NAME(setup_caddy_t_class) +#define pmix_shift_caddy_t_class PMIX_NAME(shift_caddy_t_class) +#define pmix_snd_caddy_t_class PMIX_NAME(snd_caddy_t_class) +#define pmix_snprintf PMIX_NAME(snprintf) +#define pmix_start_listening PMIX_NAME(start_listening) +#define pmix_start_progress_thread PMIX_NAME(start_progress_thread) +#define pmix_stop_listening PMIX_NAME(stop_listening) +#define pmix_stop_progress_thread PMIX_NAME(stop_progress_thread) +#define pmix_timer_t_class PMIX_NAME(timer_t_class) +#define pmix_tmp_directory PMIX_NAME(tmp_directory) +#define pmix_trkr_caddy_t_class PMIX_NAME(trkr_caddy_t_class) +#define pmix_uicrc_partial PMIX_NAME(uicrc_partial) +#define pmix_uicsum_partial PMIX_NAME(uicsum_partial) +#define pmix_unsetenv PMIX_NAME(unsetenv) +#define pmix_usock_finalize PMIX_NAME(usock_finalize) +#define pmix_usock_globals PMIX_NAME(pmix_usock_globals) +#define pmix_usock_init PMIX_NAME(usock_init) +#define pmix_usock_posted_recv_t_class PMIX_NAME(usock_posted_recv_t_class) +#define pmix_usock_process_msg PMIX_NAME(usock_process_msg) +#define pmix_usock_queue_t_class PMIX_NAME(usock_queue_t_class) +#define pmix_usock_recv_blocking PMIX_NAME(usock_recv_blocking) +#define pmix_usock_recv_handler PMIX_NAME(usock_recv_handler) +#define pmix_usock_recv_t_class PMIX_NAME(usock_recv_t_class) +#define pmix_usock_send_blocking PMIX_NAME(usock_send_blocking) +#define pmix_usock_send_handler PMIX_NAME(usock_send_handler) +#define pmix_usock_send_recv PMIX_NAME(usock_send_recv) +#define pmix_usock_send_t_class PMIX_NAME(usock_send_t_class) +#define pmix_usock_set_blocking PMIX_NAME(usock_set_blocking) +#define pmix_usock_set_nonblocking PMIX_NAME(usock_set_nonblocking) +#define pmix_usock_sr_t_class PMIX_NAME(usock_sr_t_class) +#define pmix_value_load PMIX_NAME(value_load) +#define pmix_value_unload PMIX_NAME(value_unload) +#define pmix_value_xfer PMIX_NAME(value_xfer) +#define pmix_vasprintf PMIX_NAME(vasprintf) +#define pmix_vsnprintf PMIX_NAME(vsnprintf) #endif /* PMIX_SYM_TRANSFORM */ diff --git a/opal/mca/pmix/pmix112/pmix/src/buffer_ops/buffer_ops.h b/opal/mca/pmix/pmix112/pmix/src/buffer_ops/buffer_ops.h index 65aded3e3e..0d05fa7241 100644 --- a/opal/mca/pmix/pmix112/pmix/src/buffer_ops/buffer_ops.h +++ b/opal/mca/pmix/pmix112/pmix/src/buffer_ops/buffer_ops.h @@ -38,8 +38,6 @@ BEGIN_C_DECLS -PMIX_DECLSPEC extern const char pmix_version_string[]; - /* internally used object for transferring data * to/from the server and for storing in the * hash tables */ diff --git a/opal/mca/pmix/pmix112/pmix/src/buffer_ops/open_close.c b/opal/mca/pmix/pmix112/pmix/src/buffer_ops/open_close.c index bd0a263032..3b408a88e9 100644 --- a/opal/mca/pmix/pmix112/pmix/src/buffer_ops/open_close.c +++ b/opal/mca/pmix/pmix112/pmix/src/buffer_ops/open_close.c @@ -34,13 +34,6 @@ #include "src/util/argv.h" #include "src/buffer_ops/internal.h" -#if PMIX_CC_USE_PRAGMA_IDENT -#pragma ident PMIX_VERSION -#elif PMIX_CC_USE_IDENT -#ident PMIX_VERSION -#endif -const char pmix_version_string[] = PMIX_VERSION; - /** * globals diff --git a/opal/mca/pmix/pmix112/pmix/src/client/pmix_client.c b/opal/mca/pmix/pmix112/pmix/src/client/pmix_client.c index 1bff2bced1..93f72a85d3 100644 --- a/opal/mca/pmix/pmix112/pmix/src/client/pmix_client.c +++ b/opal/mca/pmix/pmix112/pmix/src/client/pmix_client.c @@ -45,6 +45,14 @@ #endif #include PMIX_EVENT_HEADER +#if PMIX_CC_USE_PRAGMA_IDENT +#pragma ident PMIX_VERSION +#elif PMIX_CC_USE_IDENT +#ident PMIX_VERSION +#endif +static const char pmix_version_string[] = PMIX_VERSION; + + #include "src/class/pmix_list.h" #include "src/buffer_ops/buffer_ops.h" #include "src/util/argv.h" diff --git a/opal/mca/pmix/pmix112/pmix1_client.c b/opal/mca/pmix/pmix112/pmix1_client.c index c26dc32436..21d64fc7de 100644 --- a/opal/mca/pmix/pmix112/pmix1_client.c +++ b/opal/mca/pmix/pmix112/pmix1_client.c @@ -36,41 +36,49 @@ static pmix_proc_t my_proc; static char *dbgvalue=NULL; static int errhdler_ref = 0; +static void release_cbfunc(void *cbdata) +{ + pmix1_opalcaddy_t *cd = (pmix1_opalcaddy_t*)cbdata; + OBJ_RELEASE(cd); +} static void myerr(pmix_status_t status, pmix_proc_t procs[], size_t nprocs, pmix_info_t info[], size_t ninfo) { int rc; - opal_list_t plist, ilist; opal_namelist_t *nm; opal_value_t *iptr; size_t n; + pmix1_opalcaddy_t *cd; /* convert the incoming status */ rc = pmix1_convert_rc(status); + /* setup the caddy */ + cd = OBJ_NEW(pmix1_opalcaddy_t); + /* convert the array of procs */ - OBJ_CONSTRUCT(&plist, opal_list_t); for (n=0; n < nprocs; n++) { nm = OBJ_NEW(opal_namelist_t); - nm->name.jobid = strtoul(procs[n].nspace, NULL, 10); + if (OPAL_SUCCESS != (rc = opal_convert_string_to_jobid(&nm->name.jobid, procs[n].nspace))) { + OPAL_ERROR_LOG(rc); + OBJ_RELEASE(cd); + return; + } nm->name.vpid = procs[n].rank; - opal_list_append(&plist, &nm->super); + opal_list_append(&cd->procs, &nm->super); } /* convert the array of info */ - OBJ_CONSTRUCT(&ilist, opal_list_t); for (n=0; n < ninfo; n++) { iptr = OBJ_NEW(opal_value_t); iptr->key = strdup(info[n].key); pmix1_value_unload(iptr, &info[n].value); - opal_list_append(&plist, &iptr->super); + opal_list_append(&cd->info, &iptr->super); } /* call the base errhandler */ - opal_pmix_base_errhandler(rc, &plist, &ilist); - OPAL_LIST_DESTRUCT(&plist); - OPAL_LIST_DESTRUCT(&ilist); + opal_pmix_base_errhandler(rc, &cd->procs, &cd->info, release_cbfunc, cd); } static void errreg_cbfunc (pmix_status_t status, diff --git a/opal/mca/pmix/pmix112/pmix1_server_north.c b/opal/mca/pmix/pmix112/pmix1_server_north.c index 96d787a843..c2fbfc9a26 100644 --- a/opal/mca/pmix/pmix112/pmix1_server_north.c +++ b/opal/mca/pmix/pmix112/pmix1_server_north.c @@ -80,11 +80,11 @@ static pmix_status_t server_disconnect_fn(const pmix_proc_t procs[], size_t npro static pmix_status_t server_register_events(const pmix_info_t info[], size_t ninfo, pmix_op_cbfunc_t cbfunc, void *cbdata); static pmix_status_t server_deregister_events(const pmix_info_t info[], size_t ninfo, - pmix_op_cbfunc_t cbfunc, void *cbdata); + pmix_op_cbfunc_t cbfunc, void *cbdata); static pmix_status_t server_listener_fn(int listening_sd, pmix_connection_cbfunc_t cbfunc); -pmix_server_module_t mymodule = { +pmix_server_module_t pmix112_module = { server_client_connected_fn, server_client_finalized_fn, server_abort_fn, @@ -101,7 +101,7 @@ pmix_server_module_t mymodule = { server_listener_fn }; -opal_pmix_server_module_t *host_module = NULL; +opal_pmix_server_module_t *pmix112_host_module = NULL; static void opal_opcbfunc(int status, void *cbdata) @@ -119,7 +119,7 @@ static pmix_status_t server_client_connected_fn(const pmix_proc_t *p, void *serv int rc; opal_process_name_t proc; - if (NULL == host_module || NULL == host_module->client_connected) { + if (NULL == pmix112_host_module || NULL == pmix112_host_module->client_connected) { return PMIX_SUCCESS; } @@ -130,7 +130,7 @@ static pmix_status_t server_client_connected_fn(const pmix_proc_t *p, void *serv proc.vpid = p->rank; /* pass it up */ - rc = host_module->client_connected(&proc, server_object); + rc = pmix112_host_module->client_connected(&proc, server_object); return pmix1_convert_opalrc(rc); } @@ -141,7 +141,7 @@ static pmix_status_t server_client_finalized_fn(const pmix_proc_t *p, void* serv pmix1_opalcaddy_t *opalcaddy; opal_process_name_t proc; - if (NULL == host_module || NULL == host_module->client_finalized) { + if (NULL == pmix112_host_module || NULL == pmix112_host_module->client_finalized) { return PMIX_SUCCESS; } @@ -157,7 +157,7 @@ static pmix_status_t server_client_finalized_fn(const pmix_proc_t *p, void* serv opalcaddy->cbdata = cbdata; /* pass it up */ - rc = host_module->client_finalized(&proc, server_object, opal_opcbfunc, opalcaddy); + rc = pmix112_host_module->client_finalized(&proc, server_object, opal_opcbfunc, opalcaddy); if (OPAL_SUCCESS != rc) { OBJ_RELEASE(opalcaddy); } @@ -175,7 +175,7 @@ static pmix_status_t server_abort_fn(const pmix_proc_t *p, void *server_object, int rc; pmix1_opalcaddy_t *opalcaddy; - if (NULL == host_module || NULL == host_module->abort) { + if (NULL == pmix112_host_module || NULL == pmix112_host_module->abort) { return PMIX_ERR_NOT_SUPPORTED; } @@ -206,7 +206,7 @@ static pmix_status_t server_abort_fn(const pmix_proc_t *p, void *server_object, } /* pass it up */ - rc = host_module->abort(&proc, server_object, status, msg, + rc = pmix112_host_module->abort(&proc, server_object, status, msg, &opalcaddy->procs, opal_opcbfunc, opalcaddy); if (OPAL_SUCCESS != rc) { OBJ_RELEASE(opalcaddy); @@ -252,7 +252,7 @@ static pmix_status_t server_fencenb_fn(const pmix_proc_t procs[], size_t nprocs, opal_value_t *iptr; int rc; - if (NULL == host_module || NULL == host_module->fence_nb) { + if (NULL == pmix112_host_module || NULL == pmix112_host_module->fence_nb) { return PMIX_ERR_NOT_SUPPORTED; } @@ -288,7 +288,7 @@ static pmix_status_t server_fencenb_fn(const pmix_proc_t procs[], size_t nprocs, } /* pass it up */ - rc = host_module->fence_nb(&opalcaddy->procs, &opalcaddy->info, + rc = pmix112_host_module->fence_nb(&opalcaddy->procs, &opalcaddy->info, data, ndata, opmdx_response, opalcaddy); if (OPAL_SUCCESS != rc) { OBJ_RELEASE(opalcaddy); @@ -306,7 +306,7 @@ static pmix_status_t server_dmodex_req_fn(const pmix_proc_t *p, opal_value_t *iptr; size_t n; - if (NULL == host_module || NULL == host_module->direct_modex) { + if (NULL == pmix112_host_module || NULL == pmix112_host_module->direct_modex) { return PMIX_ERR_NOT_SUPPORTED; } @@ -337,7 +337,7 @@ static pmix_status_t server_dmodex_req_fn(const pmix_proc_t *p, } /* pass it up */ - rc = host_module->direct_modex(&proc, &opalcaddy->info, opmdx_response, opalcaddy); + rc = pmix112_host_module->direct_modex(&proc, &opalcaddy->info, opmdx_response, opalcaddy); if (OPAL_SUCCESS != rc && OPAL_ERR_IN_PROCESS != rc) { OBJ_RELEASE(opalcaddy); } @@ -357,7 +357,7 @@ static pmix_status_t server_publish_fn(const pmix_proc_t *p, opal_process_name_t proc; opal_value_t *oinfo; - if (NULL == host_module || NULL == host_module->publish) { + if (NULL == pmix112_host_module || NULL == pmix112_host_module->publish) { return PMIX_ERR_NOT_SUPPORTED; } @@ -388,7 +388,7 @@ static pmix_status_t server_publish_fn(const pmix_proc_t *p, } /* pass it up */ - rc = host_module->publish(&proc, &opalcaddy->info, opal_opcbfunc, opalcaddy); + rc = pmix112_host_module->publish(&proc, &opalcaddy->info, opal_opcbfunc, opalcaddy); if (OPAL_SUCCESS != rc) { OBJ_RELEASE(opalcaddy); } @@ -436,7 +436,7 @@ static pmix_status_t server_lookup_fn(const pmix_proc_t *p, char **keys, opal_value_t *iptr; size_t n; - if (NULL == host_module || NULL == host_module->lookup) { + if (NULL == pmix112_host_module || NULL == pmix112_host_module->lookup) { return PMIX_ERR_NOT_SUPPORTED; } @@ -467,7 +467,7 @@ static pmix_status_t server_lookup_fn(const pmix_proc_t *p, char **keys, } /* pass it up */ - rc = host_module->lookup(&proc, keys, &opalcaddy->info, opal_lkupcbfunc, opalcaddy); + rc = pmix112_host_module->lookup(&proc, keys, &opalcaddy->info, opal_lkupcbfunc, opalcaddy); if (OPAL_SUCCESS != rc) { OBJ_RELEASE(opalcaddy); } @@ -486,7 +486,7 @@ static pmix_status_t server_unpublish_fn(const pmix_proc_t *p, char **keys, opal_value_t *iptr; size_t n; - if (NULL == host_module || NULL == host_module->unpublish) { + if (NULL == pmix112_host_module || NULL == pmix112_host_module->unpublish) { return PMIX_SUCCESS; } @@ -517,7 +517,7 @@ static pmix_status_t server_unpublish_fn(const pmix_proc_t *p, char **keys, } /* pass it up */ - rc = host_module->unpublish(&proc, keys, &opalcaddy->info, opal_opcbfunc, opalcaddy); + rc = pmix112_host_module->unpublish(&proc, keys, &opalcaddy->info, opal_opcbfunc, opalcaddy); if (OPAL_SUCCESS != rc) { OBJ_RELEASE(opalcaddy); } @@ -552,7 +552,7 @@ static pmix_status_t server_spawn_fn(const pmix_proc_t *p, size_t k, n; int rc; - if (NULL == host_module || NULL == host_module->spawn) { + if (NULL == pmix112_host_module || NULL == pmix112_host_module->spawn) { return PMIX_ERR_NOT_SUPPORTED; } @@ -609,7 +609,7 @@ static pmix_status_t server_spawn_fn(const pmix_proc_t *p, } /* pass it up */ - rc = host_module->spawn(&proc, &opalcaddy->info, &opalcaddy->apps, opal_spncbfunc, opalcaddy); + rc = pmix112_host_module->spawn(&proc, &opalcaddy->info, &opalcaddy->apps, opal_spncbfunc, opalcaddy); if (OPAL_SUCCESS != rc) { OPAL_ERROR_LOG(rc); OBJ_RELEASE(opalcaddy); @@ -629,7 +629,7 @@ static pmix_status_t server_connect_fn(const pmix_proc_t procs[], size_t nprocs, size_t n; opal_value_t *oinfo; - if (NULL == host_module || NULL == host_module->connect) { + if (NULL == pmix112_host_module || NULL == pmix112_host_module->connect) { return PMIX_ERR_NOT_SUPPORTED; } @@ -665,7 +665,7 @@ static pmix_status_t server_connect_fn(const pmix_proc_t procs[], size_t nprocs, } /* pass it up */ - rc = host_module->connect(&opalcaddy->procs, &opalcaddy->info, opal_opcbfunc, opalcaddy); + rc = pmix112_host_module->connect(&opalcaddy->procs, &opalcaddy->info, opal_opcbfunc, opalcaddy); if (OPAL_SUCCESS != rc) { OBJ_RELEASE(opalcaddy); } @@ -684,7 +684,7 @@ static pmix_status_t server_disconnect_fn(const pmix_proc_t procs[], size_t npro size_t n; opal_value_t *oinfo; - if (NULL == host_module || NULL == host_module->disconnect) { + if (NULL == pmix112_host_module || NULL == pmix112_host_module->disconnect) { return PMIX_ERR_NOT_SUPPORTED; } @@ -720,7 +720,7 @@ static pmix_status_t server_disconnect_fn(const pmix_proc_t procs[], size_t npro } /* pass it up */ - rc = host_module->disconnect(&opalcaddy->procs, &opalcaddy->info, opal_opcbfunc, opalcaddy); + rc = pmix112_host_module->disconnect(&opalcaddy->procs, &opalcaddy->info, opal_opcbfunc, opalcaddy); if (OPAL_SUCCESS != rc) { OBJ_RELEASE(opalcaddy); } @@ -753,7 +753,7 @@ static pmix_status_t server_register_events(const pmix_info_t info[], size_t nin } /* pass it up */ - rc = host_module->register_events(&opalcaddy->info, opal_opcbfunc, opalcaddy); + rc = pmix112_host_module->register_events(&opalcaddy->info, opal_opcbfunc, opalcaddy); if (OPAL_SUCCESS != rc) { OBJ_RELEASE(opalcaddy); } @@ -771,10 +771,10 @@ static pmix_status_t server_listener_fn(int listening_sd, { int rc; - if (NULL == host_module || NULL == host_module->listener) { + if (NULL == pmix112_host_module || NULL == pmix112_host_module->listener) { return PMIX_ERR_NOT_SUPPORTED; } - rc = host_module->listener(listening_sd, cbfunc); + rc = pmix112_host_module->listener(listening_sd, cbfunc); return pmix1_convert_opalrc(rc); } diff --git a/opal/mca/pmix/pmix112/pmix1_server_south.c b/opal/mca/pmix/pmix112/pmix1_server_south.c index bcaf9b8c24..efde1eab99 100644 --- a/opal/mca/pmix/pmix112/pmix1_server_south.c +++ b/opal/mca/pmix/pmix112/pmix1_server_south.c @@ -44,46 +44,50 @@ /* These are the interfaces used by the OMPI/ORTE/OPAL layer to call * down into the embedded PMIx server. */ -extern pmix_server_module_t mymodule; -extern opal_pmix_server_module_t *host_module; +extern pmix_server_module_t pmix112_module; +extern opal_pmix_server_module_t *pmix112_host_module; static char *dbgvalue=NULL; static int errhdler_ref = 0; +static void release_cbfunc(void *cbdata) +{ + pmix1_opalcaddy_t *cd = (pmix1_opalcaddy_t*)cbdata; + OBJ_RELEASE(cd); +} static void myerr(pmix_status_t status, pmix_proc_t procs[], size_t nprocs, pmix_info_t info[], size_t ninfo) { int rc; - opal_list_t plist, ilist; opal_namelist_t *nm; opal_value_t *iptr; size_t n; + pmix1_opalcaddy_t *cd; /* convert the incoming status */ rc = pmix1_convert_rc(status); + /* setup the caddy */ + cd = OBJ_NEW(pmix1_opalcaddy_t); + /* convert the array of procs */ - OBJ_CONSTRUCT(&plist, opal_list_t); for (n=0; n < nprocs; n++) { nm = OBJ_NEW(opal_namelist_t); nm->name.jobid = strtoul(procs[n].nspace, NULL, 10); nm->name.vpid = procs[n].rank; - opal_list_append(&plist, &nm->super); + opal_list_append(&cd->procs, &nm->super); } /* convert the array of info */ - OBJ_CONSTRUCT(&ilist, opal_list_t); for (n=0; n < ninfo; n++) { iptr = OBJ_NEW(opal_value_t); iptr->key = strdup(info[n].key); pmix1_value_unload(iptr, &info[n].value); - opal_list_append(&plist, &iptr->super); + opal_list_append(&cd->info, &iptr->super); } /* call the base errhandler */ - opal_pmix_base_errhandler(rc, &plist, &ilist); - OPAL_LIST_DESTRUCT(&plist); - OPAL_LIST_DESTRUCT(&ilist); + opal_pmix_base_errhandler(rc, &cd->procs, &cd->info, release_cbfunc, cd); } static void errreg_cbfunc(pmix_status_t status, @@ -125,14 +129,14 @@ int pmix1_server_init(opal_pmix_server_module_t *module, pinfo = NULL; } - if (PMIX_SUCCESS != (rc = PMIx_server_init(&mymodule, pinfo, sz))) { + if (PMIX_SUCCESS != (rc = PMIx_server_init(&pmix112_module, pinfo, sz))) { PMIX_INFO_FREE(pinfo, sz); return pmix1_convert_rc(rc); } PMIX_INFO_FREE(pinfo, sz); /* record the host module */ - host_module = module; + pmix112_host_module = module; /* register the errhandler */ PMIx_Register_errhandler(NULL, 0, myerr, errreg_cbfunc, NULL); @@ -428,7 +432,7 @@ int pmix1_server_notify_error(int status, rc = pmix1_convert_opalrc(status); rc = PMIx_Notify_error(rc, ps, psz, eps, esz, - pinfo, sz, opcbfunc, op); + pinfo, sz, opcbfunc, op); if (PMIX_SUCCESS != rc) { OBJ_RELEASE(op); } diff --git a/opal/mca/pmix/pmix_server.h b/opal/mca/pmix/pmix_server.h index 3f34d0a617..28d6c4fdc4 100644 --- a/opal/mca/pmix/pmix_server.h +++ b/opal/mca/pmix/pmix_server.h @@ -168,6 +168,11 @@ typedef int (*opal_pmix_server_disconnect_fn_t)(opal_list_t *procs, opal_list_t opal_pmix_op_cbfunc_t cbfunc, void *cbdata); +/* Deregister from the specified events. */ + typedef int (*opal_pmix_server_deregister_events_fn_t)(opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata); + /* Callback function for incoming connection requests from * local clients */ typedef void (*opal_pmix_connection_cbfunc_t)(int incoming_sd); @@ -186,19 +191,20 @@ typedef int (*opal_pmix_server_listener_fn_t)(int listening_sd, opal_pmix_connection_cbfunc_t cbfunc); typedef struct opal_pmix_server_module_1_0_0_t { - opal_pmix_server_client_connected_fn_t client_connected; - opal_pmix_server_client_finalized_fn_t client_finalized; - opal_pmix_server_abort_fn_t abort; - opal_pmix_server_fencenb_fn_t fence_nb; - opal_pmix_server_dmodex_req_fn_t direct_modex; - opal_pmix_server_publish_fn_t publish; - opal_pmix_server_lookup_fn_t lookup; - opal_pmix_server_unpublish_fn_t unpublish; - opal_pmix_server_spawn_fn_t spawn; - opal_pmix_server_connect_fn_t connect; - opal_pmix_server_disconnect_fn_t disconnect; - opal_pmix_server_register_events_fn_t register_events; - opal_pmix_server_listener_fn_t listener; + opal_pmix_server_client_connected_fn_t client_connected; + opal_pmix_server_client_finalized_fn_t client_finalized; + opal_pmix_server_abort_fn_t abort; + opal_pmix_server_fencenb_fn_t fence_nb; + opal_pmix_server_dmodex_req_fn_t direct_modex; + opal_pmix_server_publish_fn_t publish; + opal_pmix_server_lookup_fn_t lookup; + opal_pmix_server_unpublish_fn_t unpublish; + opal_pmix_server_spawn_fn_t spawn; + opal_pmix_server_connect_fn_t connect; + opal_pmix_server_disconnect_fn_t disconnect; + opal_pmix_server_register_events_fn_t register_events; + opal_pmix_server_deregister_events_fn_t deregister_events; + opal_pmix_server_listener_fn_t listener; } opal_pmix_server_module_t; diff --git a/opal/mca/pmix/pmix_types.h b/opal/mca/pmix/pmix_types.h index 8c14d564c7..7dbf1d5544 100644 --- a/opal/mca/pmix/pmix_types.h +++ b/opal/mca/pmix/pmix_types.h @@ -118,6 +118,22 @@ BEGIN_C_DECLS #define OPAL_PMIX_PROC_BLOB "pmix.pblob" // (pmix_byte_object_t) packed blob of process data #define OPAL_PMIX_MAP_BLOB "pmix.mblob" // (pmix_byte_object_t) packed blob of process location +/* error handler registration and notification info keys */ +#define OPAL_PMIX_ERROR_NAME "pmix.errname" /* enum pmix_status_t specific error to be notified */ +#define OPAL_PMIX_ERROR_GROUP_COMM "pmix.errgroup.comm" /* bool - set true to get comm errors notification */ +#define OPAL_PMIX_ERROR_GROUP_ABORT "pmix.errgroup.abort" /* bool -set true to get abort errors notification */ +#define OPAL_PMIX_ERROR_GROUP_MIGRATE "pmix.errgroup.migrate" /* bool -set true to get migrate errors notification */ +#define OPAL_PMIX_ERROR_GROUP_RESOURCE "pmix.errgroup.resource" /* bool -set true to get resource errors notification */ +#define OPAL_PMIX_ERROR_GROUP_SPAWN "pmix.errgroup.spawn" /* bool - set true to get spawn errors notification */ +#define OPAL_PMIX_ERROR_GROUP_NODE "pmix.errgroup.node" /* bool -set true to get node status errors */ +#define OPAL_PMIX_ERROR_GROUP_LOCAL "pmix.errgroup.local" /* bool set true to get local errors */ +#define OPAL_PMIX_ERROR_GROUP_GENERAL "pmix.errgroup.gen" /* bool set true to get notified af generic errors */ + +/* error notification keys */ +#define OPAL_PMIX_ERROR_SCOPE "pmix.errscope" /* int (enum pmix_scope_t) scope of error notification*/ +#define OPAL_PMIX_ERROR_NODE_NAME "pmix.errnode.name" /* name of the node that is in error or which reported the error.*/ +#define OPAL_PMIX_ERROR_SEVERITY "pmix.errseverity" /* the severity of the notified (reported) error */ + /* attributes used to describe "spawm" attributes */ #define OPAL_PMIX_PERSONALITY "pmix.pers" // (char*) name of personality to use #define OPAL_PMIX_HOST "pmix.host" // (char*) comma-delimited list of hosts to use for spawned procs @@ -265,6 +281,9 @@ typedef void (*opal_pmix_lookup_cbfunc_t)(int status, * value indicates that the error occurred in the module * library within this process itself * info - any additional info provided regarding the error. + * cbfunc - callback function to execute when the errhandler is + * finished with the provided data so it can be released + * cbdata - pointer to be returned in cbfunc * * Note that different resource managers may provide differing levels * of support for error notification to application processes. Thus, the @@ -296,7 +315,18 @@ typedef void (*opal_pmix_lookup_cbfunc_t)(int status, * server of a detected error in the PMIx subsystem and/or client */ typedef void (*opal_pmix_notification_fn_t)(int status, opal_list_t *procs, - opal_list_t *info); + opal_list_t *info, + opal_pmix_release_cbfunc_t cbfunc, + void *cbdata); + +/* define a callback function for calls to register_errhandler. The + * status indicates if the request was successful or not, errhandler_ref is + * an integer reference assigned to the errhandler by PMIX, this reference + * must be used to deregister the err handler. A ptr to the original + * cbdata is returned. */ +typedef void (*opal_pmix_errhandler_reg_cbfunc_t)(int status, + int errhandler_ref, + void *cbdata); /* define a callback function for calls to get_nb. The status * indicates if the requested data was found or not - a pointer to the diff --git a/opal/mca/pmix/s1/pmix_s1.c b/opal/mca/pmix/s1/pmix_s1.c index 26927bff17..83d87bc8d4 100644 --- a/opal/mca/pmix/s1/pmix_s1.c +++ b/opal/mca/pmix/s1/pmix_s1.c @@ -54,47 +54,25 @@ static const char *s1_get_nspace(opal_jobid_t jobid); static void s1_register_jobid(opal_jobid_t jobid, const char *nspace); const opal_pmix_base_module_t opal_pmix_s1_module = { - s1_init, - s1_fini, - s1_initialized, - s1_abort, - s1_commit, - s1_fence, - NULL, - s1_put, - s1_get, - NULL, - s1_publish, - NULL, - s1_lookup, - NULL, - s1_unpublish, - NULL, - s1_spawn, - NULL, - s1_job_connect, - NULL, - s1_job_disconnect, - NULL, - NULL, - NULL, - /* server APIs */ - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - /* utility APIs */ - NULL, - opal_pmix_base_register_handler, - opal_pmix_base_deregister_handler, - s1_store_local, - s1_get_nspace, - s1_register_jobid + .init = s1_init, + .finalize = s1_fini, + .initialized = s1_initialized, + .abort = s1_abort, + .commit = s1_commit, + .fence = s1_fence, + .put = s1_put, + .get = s1_get, + .publish = s1_publish, + .lookup = s1_lookup, + .unpublish = s1_unpublish, + .spawn = s1_spawn, + .connect = s1_job_connect, + .disconnect = s1_job_disconnect, + .register_errhandler = opal_pmix_base_register_handler, + .deregister_errhandler = opal_pmix_base_deregister_handler, + .store_local = s1_store_local, + .get_nspace = s1_get_nspace, + .register_jobid = s1_register_jobid }; // usage accounting diff --git a/opal/mca/pmix/s2/pmix_s2.c b/opal/mca/pmix/s2/pmix_s2.c index e4b153aad6..69f510eb70 100644 --- a/opal/mca/pmix/s2/pmix_s2.c +++ b/opal/mca/pmix/s2/pmix_s2.c @@ -61,47 +61,25 @@ static const char *s2_get_nspace(opal_jobid_t jobid); static void s2_register_jobid(opal_jobid_t jobid, const char *nspace); const opal_pmix_base_module_t opal_pmix_s2_module = { - s2_init, - s2_fini, - s2_initialized, - s2_abort, - s2_commit, - s2_fence, - NULL, - s2_put, - s2_get, - NULL, - s2_publish, - NULL, - s2_lookup, - NULL, - s2_unpublish, - NULL, - s2_spawn, - NULL, - s2_job_connect, - NULL, - s2_job_disconnect, - NULL, - NULL, - NULL, - /* server APIs */ - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - /* utility APIs */ - NULL, - opal_pmix_base_register_handler, - opal_pmix_base_deregister_handler, - s2_store_local, - s2_get_nspace, - s2_register_jobid + .init = s2_init, + .finalize = s2_fini, + .initialized = s2_initialized, + .abort = s2_abort, + .commit = s2_commit, + .fence = s2_fence, + .put = s2_put, + .get = s2_get, + .publish = s2_publish, + .lookup = s2_lookup, + .unpublish = s2_unpublish, + .spawn = s2_spawn, + .connect = s2_job_connect, + .disconnect = s2_job_disconnect, + .register_errhandler = opal_pmix_base_register_handler, + .deregister_errhandler = opal_pmix_base_deregister_handler, + .store_local = s2_store_local, + .get_nspace = s2_get_nspace, + .register_jobid = s2_register_jobid }; // usage accounting @@ -161,7 +139,7 @@ static int kvs_get(const char key[], char value [], int maxvalue) * been inserted, so suppress warning message if this is the * case */ - if (PMI_SUCCESS != rc) { + if (PMI2_SUCCESS != rc) { return OPAL_ERROR; } return OPAL_SUCCESS; diff --git a/orte/mca/errmgr/default_app/errmgr_default_app.c b/orte/mca/errmgr/default_app/errmgr_default_app.c index 8ee289e040..6f6a899cbd 100644 --- a/orte/mca/errmgr/default_app/errmgr_default_app.c +++ b/orte/mca/errmgr/default_app/errmgr_default_app.c @@ -9,6 +9,7 @@ * reserved. * Copyright (c) 2011-2013 Los Alamos National Security, LLC. * All rights reserved. + * Copyright (c) 2015 Intel, Inc. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -26,7 +27,7 @@ #include "opal/util/output.h" #include "opal/dss/dss.h" -#include "opal/mca/pmix/pmix.h" +#include "opal/errhandler/opal_errhandler.h" #include "orte/util/error_strings.h" #include "orte/util/name_fns.h" @@ -43,17 +44,17 @@ /* * Module functions: Global */ -static int init(void); -static int finalize(void); + static int init(void); + static int finalize(void); -static int abort_peers(orte_process_name_t *procs, - orte_std_cntr_t num_procs, - int error_code); + static int abort_peers(orte_process_name_t *procs, + orte_std_cntr_t num_procs, + int error_code); /****************** * HNP module ******************/ -orte_errmgr_base_module_t orte_errmgr_default_app_module = { + orte_errmgr_base_module_t orte_errmgr_default_app_module = { init, finalize, orte_errmgr_base_log, @@ -68,7 +69,7 @@ orte_errmgr_base_module_t orte_errmgr_default_app_module = { }; static void proc_errors(int fd, short args, void *cbdata); -static void pmix_error(int error) +static void pmix_error(int error, opal_proc_t *proc, void *cbdata) { /* push it into our event base */ ORTE_ACTIVATE_PROC_STATE(ORTE_PROC_MY_NAME, ORTE_PROC_STATE_COMM_FAILED); @@ -77,25 +78,20 @@ static void pmix_error(int error) /************************ * API Definitions ************************/ -static int init(void) -{ + static int init(void) + { /* setup state machine to trap proc errors */ orte_state.add_proc_state(ORTE_PROC_STATE_ERROR, proc_errors, ORTE_ERROR_PRI); - /* register an errhandler with the PMIx framework so - * we can know of loss of connection to the server */ - if (NULL != opal_pmix.register_errhandler) { - opal_pmix.register_errhandler(pmix_error); - } + /* register an errhandler */ + opal_register_errhandler(pmix_error, NULL); return ORTE_SUCCESS; } static int finalize(void) { - if (NULL != opal_pmix.deregister_errhandler) { - opal_pmix.deregister_errhandler(); - } + opal_deregister_errhandler(); return ORTE_SUCCESS; } @@ -108,15 +104,15 @@ static void proc_errors(int fd, short args, void *cbdata) opal_pointer_array_t errors; OPAL_OUTPUT_VERBOSE((1, orte_errmgr_base_framework.framework_output, - "%s errmgr:default_app: proc %s state %s", - ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), - ORTE_NAME_PRINT(&caddy->name), - orte_proc_state_to_str(caddy->proc_state))); + "%s errmgr:default_app: proc %s state %s", + ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), + ORTE_NAME_PRINT(&caddy->name), + orte_proc_state_to_str(caddy->proc_state))); /* * if orte is trying to shutdown, just let it */ - if (orte_finalizing) { + if (orte_finalizing) { OBJ_RELEASE(caddy); return; } @@ -141,8 +137,8 @@ static void proc_errors(int fd, short args, void *cbdata) /* flag that we must abnormally terminate as far as the * RTE is concerned */ - orte_abnormal_term_ordered = true; - } else if (ORTE_PROC_STATE_LIFELINE_LOST == caddy->proc_state) { + orte_abnormal_term_ordered = true; + } else if (ORTE_PROC_STATE_LIFELINE_LOST == caddy->proc_state) { /* we need to die, so mark us so */ orte_abnormal_term_ordered = true; } diff --git a/orte/orted/pmix/pmix_server.c b/orte/orted/pmix/pmix_server.c index e73ddafaa7..780286e3c0 100644 --- a/orte/orted/pmix/pmix_server.c +++ b/orte/orted/pmix/pmix_server.c @@ -96,6 +96,7 @@ static opal_pmix_server_module_t pmix_server = { pmix_server_connect_fn, pmix_server_disconnect_fn, pmix_server_register_events_fn, + pmix_server_deregister_events_fn, NULL }; diff --git a/orte/orted/pmix/pmix_server_dyn.c b/orte/orted/pmix/pmix_server_dyn.c index 134085fee8..e9bfe5cd09 100644 --- a/orte/orted/pmix/pmix_server_dyn.c +++ b/orte/orted/pmix/pmix_server_dyn.c @@ -263,6 +263,10 @@ int pmix_server_spawn_fn(opal_process_name_t *requestor, true, "spawn", "job level", info->key); } } + /* if the job is missing a personality setting, add it */ + if (NULL == jdata->personality) { + jdata->personality = strdup("ompi"); + } /* transfer the apps across */ OPAL_LIST_FOREACH(papp, apps, opal_pmix_app_t) { diff --git a/orte/orted/pmix/pmix_server_gen.c b/orte/orted/pmix/pmix_server_gen.c index 037eb375bc..1a63094fe5 100644 --- a/orte/orted/pmix/pmix_server_gen.c +++ b/orte/orted/pmix/pmix_server_gen.c @@ -115,5 +115,20 @@ int pmix_server_register_events_fn(opal_list_t *info, opal_pmix_op_cbfunc_t cbfunc, void *cbdata) { - return OPAL_ERR_NOT_IMPLEMENTED; + /* for now, just execute the cbfunc */ + if (NULL != cbfunc) { + cbfunc(OPAL_SUCCESS, cbdata); + } + return OPAL_SUCCESS; +} + +int pmix_server_deregister_events_fn(opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata) +{ + /* for now, just execute the cbfunc */ + if (NULL != cbfunc) { + cbfunc(OPAL_SUCCESS, cbdata); + } + return OPAL_SUCCESS; } diff --git a/orte/orted/pmix/pmix_server_internal.h b/orte/orted/pmix/pmix_server_internal.h index beb114c6b1..62d45dc7e3 100644 --- a/orte/orted/pmix/pmix_server_internal.h +++ b/orte/orted/pmix/pmix_server_internal.h @@ -162,6 +162,9 @@ extern int pmix_server_disconnect_fn(opal_list_t *procs, opal_list_t *info, extern int pmix_server_register_events_fn(opal_list_t *info, opal_pmix_op_cbfunc_t cbfunc, void *cbdata); +extern int pmix_server_deregister_events_fn(opal_list_t *info, + opal_pmix_op_cbfunc_t cbfunc, + void *cbdata); /* declare the RML recv functions for responses */ extern void pmix_server_launch_resp(int status, orte_process_name_t* sender, diff --git a/orte/test/mpi/intercomm_create.c b/orte/test/mpi/intercomm_create.c index 2fada73635..df9c5be650 100644 --- a/orte/test/mpi/intercomm_create.c +++ b/orte/test/mpi/intercomm_create.c @@ -123,6 +123,11 @@ do_parent(char *argv[], int rank, int count) err = MPI_Barrier(abc_intra); printf( "%s: barrier (%d)\n", whoami, err ); + MPI_Comm_free(&abc_intra); + MPI_Comm_free(&ab_c_inter); + MPI_Comm_free(&ab_intra); + MPI_Comm_free(&ac_intra); + MPI_Comm_disconnect(&ab_inter); MPI_Comm_disconnect(&ac_inter); }