aboutsummaryrefslogtreecommitdiff
path: root/src/core/init.c
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2021-12-05 22:11:24 -0500
committerGarrett D'Amore <garrett@damore.org>2021-12-05 23:04:45 -0500
commitc9bbe8eb574fe10ff16cc71a23fcc9b31fb8ed04 (patch)
tree3a135bbee8750cc1b1869cfca6a2e6f24bf8e59c /src/core/init.c
parenteee06d1e8365ea1b1aa9363a3c6445745b002324 (diff)
downloadnng-c9bbe8eb574fe10ff16cc71a23fcc9b31fb8ed04.tar.gz
nng-c9bbe8eb574fe10ff16cc71a23fcc9b31fb8ed04.tar.bz2
nng-c9bbe8eb574fe10ff16cc71a23fcc9b31fb8ed04.zip
Use static initialization for lists and mutexes.
This eliminates some run-time initialization, moving it to compile time. Additional follow up work will expand on this to simplify initialization and reduce the need for certain locks.
Diffstat (limited to 'src/core/init.c')
-rw-r--r--src/core/init.c47
1 files changed, 5 insertions, 42 deletions
diff --git a/src/core/init.c b/src/core/init.c
index c923fdf0..f9dee9e2 100644
--- a/src/core/init.c
+++ b/src/core/init.c
@@ -14,21 +14,16 @@
#include <stdio.h>
#include <stdlib.h>
-static nni_mtx nni_init_mtx;
-static nni_list nni_init_list;
-static bool nni_inited = false;
-
-extern int nni_tls_sys_init(void);
+extern int nni_tls_sys_init(void);
extern void nni_tls_sys_fini(void);
+static bool nni_inited = false;
+
static int
nni_init_helper(void)
{
int rv;
- nni_mtx_init(&nni_init_mtx);
- NNI_LIST_INIT(&nni_init_list, nni_initializer, i_node);
- nni_inited = true;
#ifdef NNG_TEST_LIB
static bool cleanup = false;
if (!cleanup) {
@@ -54,6 +49,8 @@ nni_init_helper(void)
nni_pipe_sys_init();
nni_sp_tran_sys_init();
+ nni_inited = true;
+
return (0);
}
@@ -69,19 +66,6 @@ nni_fini(void)
if (!nni_inited) {
return;
}
- if (!nni_list_empty(&nni_init_list)) {
- nni_initializer *init;
-
- nni_mtx_lock(&nni_init_mtx);
- while ((init = nni_list_first(&nni_init_list)) != NULL) {
- if (init->i_fini != NULL) {
- init->i_fini();
- }
- init->i_once = 0;
- nni_list_remove(&nni_init_list, init);
- }
- nni_mtx_unlock(&nni_init_mtx);
- }
nni_sp_tran_sys_fini();
nni_tls_sys_fini();
nni_pipe_sys_fini();
@@ -95,27 +79,6 @@ nni_fini(void)
nni_reap_sys_fini(); // must be before timer and aio (expire)
nni_stat_sys_fini();
- nni_mtx_fini(&nni_init_mtx);
nni_plat_fini();
nni_inited = false;
}
-
-int
-nni_initialize(nni_initializer *init)
-{
- int rv;
- if (init->i_once) {
- return (0);
- }
- nni_mtx_lock(&nni_init_mtx);
- if (init->i_once) {
- nni_mtx_unlock(&nni_init_mtx);
- return (0);
- }
- if ((rv = init->i_init()) == 0) {
- init->i_once = 1;
- nni_list_append(&nni_init_list, init);
- }
- nni_mtx_unlock(&nni_init_mtx);
- return (rv);
-}