diff options
| author | Garrett D'Amore <garrett@damore.org> | 2021-12-05 22:11:24 -0500 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2021-12-05 23:04:45 -0500 |
| commit | c9bbe8eb574fe10ff16cc71a23fcc9b31fb8ed04 (patch) | |
| tree | 3a135bbee8750cc1b1869cfca6a2e6f24bf8e59c /src/core/init.c | |
| parent | eee06d1e8365ea1b1aa9363a3c6445745b002324 (diff) | |
| download | nng-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.c | 47 |
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); -} |
