This source file includes following definitions.
- pmix_plog_register
- pmix_plog_close
- pmix_plog_open
- acon
1
2
3
4
5
6
7
8
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
26
27
28
29
30 #include "src/mca/plog/base/static-components.h"
31
32
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
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
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);