root/opal/mca/pmix/pmix4x/pmix/src/mca/plog/base/plog_base_frame.c

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

DEFINITIONS

This source file includes following definitions.
  1. pmix_plog_register
  2. pmix_plog_close
  3. pmix_plog_open
  4. acon

   1 /* -*- Mode: C; c-basic-offset:4 ; -*- */
   2 /*
   3  * Copyright (c) 2018      Intel, Inc. All rights reserved.
   4  * $COPYRIGHT$
   5  *
   6  * Additional copyrights may follow
   7  *
   8  * $HEADER$
   9  */
  10 #include <src/include/pmix_config.h>
  11 
  12 #include <pmix_common.h>
  13 
  14 #ifdef HAVE_STRING_H
  15 #include <string.h>
  16 #endif
  17 
  18 #include "src/class/pmix_list.h"
  19 #include "src/threads/threads.h"
  20 #include "src/util/argv.h"
  21 #include "src/mca/base/base.h"
  22 #include "src/mca/plog/base/base.h"
  23 
  24 /*
  25  * The following file was created by configure.  It contains extern
  26  * statements and the definition of an array of pointers to each
  27  * component's public mca_base_component_t struct.
  28  */
  29 
  30 #include "src/mca/plog/base/static-components.h"
  31 
  32 /* Instantiate the global vars */
  33 pmix_plog_globals_t pmix_plog_globals = {{0}};
  34 pmix_plog_API_module_t pmix_plog = {
  35     .log = pmix_plog_base_log
  36 };
  37 
  38 static char *order = NULL;
  39 static int pmix_plog_register(pmix_mca_base_register_flag_t flags)
  40 {
  41     pmix_mca_base_var_register("pmix", "plog", "base", "order",
  42                                "Comma-delimited, prioritized list of logging channels",
  43                                PMIX_MCA_BASE_VAR_TYPE_STRING, NULL, 0, 0,
  44                                PMIX_INFO_LVL_2,
  45                                PMIX_MCA_BASE_VAR_SCOPE_READONLY,
  46                                &order);
  47     if (NULL != order) {
  48         pmix_plog_globals.channels = pmix_argv_split(order, ',');
  49     }
  50     return PMIX_SUCCESS;
  51 }
  52 
  53 static pmix_status_t pmix_plog_close(void)
  54 {
  55     pmix_plog_base_active_module_t *active;
  56     int n;
  57 
  58     if (!pmix_plog_globals.initialized) {
  59         return PMIX_SUCCESS;
  60     }
  61     pmix_plog_globals.initialized = false;
  62 
  63     for (n=0; n < pmix_plog_globals.actives.size; n++) {
  64         if (NULL == (active = (pmix_plog_base_active_module_t*)pmix_pointer_array_get_item(&pmix_plog_globals.actives, n))) {
  65             continue;
  66         }
  67         if (NULL != active->module->finalize) {
  68           active->module->finalize();
  69         }
  70         PMIX_RELEASE(active);
  71         pmix_pointer_array_set_item(&pmix_plog_globals.actives, n, NULL);
  72     }
  73     PMIX_DESTRUCT(&pmix_plog_globals.actives);
  74 
  75     PMIX_DESTRUCT_LOCK(&pmix_plog_globals.lock);
  76 
  77     return pmix_mca_base_framework_components_close(&pmix_plog_base_framework, NULL);
  78 }
  79 
  80 static pmix_status_t pmix_plog_open(pmix_mca_base_open_flag_t flags)
  81 {
  82     /* initialize globals */
  83     pmix_plog_globals.initialized = true;
  84     pmix_plog_globals.channels = NULL;
  85     PMIX_CONSTRUCT(&pmix_plog_globals.actives, pmix_pointer_array_t);
  86     pmix_pointer_array_init(&pmix_plog_globals.actives, 1, INT_MAX, 1);
  87     PMIX_CONSTRUCT_LOCK(&pmix_plog_globals.lock);
  88     pmix_plog_globals.lock.active = false;
  89 
  90     /* Open up all available components */
  91     return pmix_mca_base_framework_components_open(&pmix_plog_base_framework, flags);
  92 }
  93 
  94 PMIX_MCA_BASE_FRAMEWORK_DECLARE(pmix, plog, "PMIx Logging Operations",
  95                                 pmix_plog_register, pmix_plog_open, pmix_plog_close,
  96                                 mca_plog_base_static_components, 0);
  97 
  98 static void acon(pmix_plog_base_active_module_t *p)
  99 {
 100     p->reqd = false;
 101     p->added = false;
 102 }
 103 PMIX_CLASS_INSTANCE(pmix_plog_base_active_module_t,
 104                     pmix_list_item_t,
 105                     acon, NULL);

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