root/opal/mca/pmix/base/pmix_base_frame.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. opal_pmix_base_frame_register
  2. opal_pmix_base_frame_close
  3. opal_pmix_base_frame_open
  4. lkcon
  5. lkdes
  6. mdcon
  7. mddes
  8. apcon
  9. apdes
  10. qcon
  11. qdes

   1 /*
   2  * Copyright (c) 2014-2017 Intel, Inc. All rights reserved.
   3  * Copyright (c) 2015-2016 Cisco Systems, Inc.  All rights reserved.
   4  * $COPYRIGHT$
   5  *
   6  * Additional copyrights may follow
   7  *
   8  * $HEADER$
   9  */
  10 
  11 
  12 #include "opal_config.h"
  13 #include "opal/constants.h"
  14 
  15 #include "opal/mca/mca.h"
  16 #include "opal/threads/thread_usage.h"
  17 #include "opal/util/argv.h"
  18 #include "opal/util/output.h"
  19 #include "opal/mca/base/base.h"
  20 
  21 #include "opal/mca/pmix/pmix.h"
  22 #include "opal/mca/pmix/base/base.h"
  23 
  24 
  25 /*
  26  * The following file was created by configure.  It contains extern
  27  * components and the definition of an array of pointers to each
  28  * module's public mca_base_module_t struct.
  29  */
  30 
  31 #include "opal/mca/pmix/base/static-components.h"
  32 
  33 /* Note that this initializer is important -- do not remove it!  See
  34    https://github.com/open-mpi/ompi/issues/375 for details. */
  35 opal_pmix_base_module_t opal_pmix = { 0 };
  36 bool opal_pmix_collect_all_data = true;
  37 int opal_pmix_verbose_output = -1;
  38 bool opal_pmix_base_async_modex = false;
  39 opal_pmix_base_t opal_pmix_base = {
  40     .evbase = NULL,
  41     .timeout = 0,
  42     .initialized = 0,
  43     .lock = {
  44         .mutex = OPAL_MUTEX_STATIC_INIT,
  45         .cond = OPAL_PMIX_CONDITION_STATIC_INIT,
  46         .active = false
  47     }
  48 };
  49 
  50 static int opal_pmix_base_frame_register(mca_base_register_flag_t flags)
  51 {
  52     opal_pmix_base_async_modex = false;
  53     (void) mca_base_var_register("opal", "pmix", "base", "async_modex", "Use asynchronous modex mode",
  54                                  MCA_BASE_VAR_TYPE_BOOL, NULL, 0, 0, OPAL_INFO_LVL_9,
  55                                  MCA_BASE_VAR_SCOPE_READONLY, &opal_pmix_base_async_modex);
  56     opal_pmix_collect_all_data = true;
  57     (void) mca_base_var_register("opal", "pmix", "base", "collect_data", "Collect all data during modex",
  58                                  MCA_BASE_VAR_TYPE_BOOL, NULL, 0, 0, OPAL_INFO_LVL_9,
  59                                  MCA_BASE_VAR_SCOPE_READONLY, &opal_pmix_collect_all_data);
  60 
  61     opal_pmix_base.timeout = -1;
  62     (void) mca_base_var_register("opal", "pmix", "base", "exchange_timeout",
  63                                  "Time (in seconds) to wait for a data exchange to complete",
  64                                  MCA_BASE_VAR_TYPE_INT, NULL, 0, 0, OPAL_INFO_LVL_3,
  65                                  MCA_BASE_VAR_SCOPE_READONLY, &opal_pmix_base.timeout);
  66     return OPAL_SUCCESS;
  67 }
  68 
  69 static int opal_pmix_base_frame_close(void)
  70 {
  71     int rc;
  72 
  73     rc = mca_base_framework_components_close(&opal_pmix_base_framework, NULL);
  74     /* reset the opal_pmix function pointers to NULL */
  75     memset(&opal_pmix, 0, sizeof(opal_pmix));
  76     return rc;
  77 }
  78 
  79 static int opal_pmix_base_frame_open(mca_base_open_flag_t flags)
  80 {
  81     int rc;
  82 
  83     /* Open up all available components */
  84     rc = mca_base_framework_components_open(&opal_pmix_base_framework, flags);
  85     /* ensure the function pointers are NULL */
  86     memset(&opal_pmix, 0, sizeof(opal_pmix));
  87     /* default to the OPAL event base */
  88     opal_pmix_base.evbase = opal_sync_event_base;
  89     /* pass across the verbosity */
  90     opal_pmix_verbose_output = opal_pmix_base_framework.framework_output;
  91     return rc;
  92 }
  93 
  94 MCA_BASE_FRAMEWORK_DECLARE(opal, pmix, "OPAL PMI Client Framework",
  95                            opal_pmix_base_frame_register,
  96                            opal_pmix_base_frame_open,
  97                            opal_pmix_base_frame_close,
  98                            mca_pmix_base_static_components, 0);
  99 
 100 /****  PMIX FRAMEWORK OBJECTS  ****/
 101 static void lkcon(opal_pmix_pdata_t *p)
 102 {
 103     p->proc.jobid = OPAL_JOBID_INVALID;
 104     p->proc.vpid = OPAL_VPID_INVALID;
 105     OBJ_CONSTRUCT(&p->value, opal_value_t);
 106 }
 107 static void lkdes(opal_pmix_pdata_t *p)
 108 {
 109     OBJ_DESTRUCT(&p->value);
 110 }
 111 OBJ_CLASS_INSTANCE(opal_pmix_pdata_t,
 112                    opal_list_item_t,
 113                    lkcon, lkdes);
 114 
 115 static void mdcon(opal_pmix_modex_data_t *p)
 116 {
 117     p->proc.jobid = OPAL_JOBID_INVALID;
 118     p->proc.vpid = OPAL_VPID_INVALID;
 119     p->blob = NULL;
 120     p->size = 0;
 121 }
 122 static void mddes(opal_pmix_modex_data_t *p)
 123 {
 124     if (NULL != p->blob) {
 125         free(p->blob);
 126     }
 127 }
 128 OBJ_CLASS_INSTANCE(opal_pmix_modex_data_t,
 129                    opal_list_item_t,
 130                    mdcon, mddes);
 131 
 132 static void apcon(opal_pmix_app_t *p)
 133 {
 134     p->cmd = NULL;
 135     p->argv = NULL;
 136     p->env = NULL;
 137     p->cwd = NULL;
 138     p->maxprocs = 0;
 139     OBJ_CONSTRUCT(&p->info, opal_list_t);
 140 }
 141 static void apdes(opal_pmix_app_t *p)
 142 {
 143     if (NULL != p->cmd) {
 144         free(p->cmd);
 145     }
 146     if (NULL != p->argv) {
 147         opal_argv_free(p->argv);
 148     }
 149     if (NULL != p->env) {
 150         opal_argv_free(p->env);
 151     }
 152     if (NULL != p->cwd) {
 153         free(p->cwd);
 154     }
 155     OPAL_LIST_DESTRUCT(&p->info);
 156 }
 157 OBJ_CLASS_INSTANCE(opal_pmix_app_t,
 158                    opal_list_item_t,
 159                    apcon, apdes);
 160 
 161 static void qcon(opal_pmix_query_t *p)
 162 {
 163     p->keys = NULL;
 164     OBJ_CONSTRUCT(&p->qualifiers, opal_list_t);
 165 }
 166 static void qdes(opal_pmix_query_t *p)
 167 {
 168     if (NULL != p->keys) {
 169         opal_argv_free(p->keys);
 170     }
 171     OPAL_LIST_DESTRUCT(&p->qualifiers);
 172 }
 173 OBJ_CLASS_INSTANCE(opal_pmix_query_t,
 174                    opal_list_item_t,
 175                    qcon, qdes);

/* [<][>][^][v][top][bottom][index][help] */