diff --git a/lib/s6a/s6a_app.h b/lib/s6a/s6a_app.h index 4d981dbdc..8e529b636 100644 --- a/lib/s6a/s6a_app.h +++ b/lib/s6a/s6a_app.h @@ -82,16 +82,6 @@ struct ta_conf { }; extern struct ta_conf * ta_conf; -typedef struct _s6a_config_t { - c_uint8_t *identity; - c_uint8_t *realm; -} s6a_config_t; - -CORE_DECLARE(status_t) s6a_config_init(int hss); - -CORE_DECLARE(status_t) s6a_thread_start(int hss); -CORE_DECLARE(void) s6a_thread_stop(); - int s6a_app_init(void); void s6a_app_final(void); diff --git a/lib/s6a/s6a_fd_init.c b/lib/s6a/s6a_fd_init.c index 6fd6b10ad..b4b5b5b57 100644 --- a/lib/s6a/s6a_fd_init.c +++ b/lib/s6a/s6a_fd_init.c @@ -61,7 +61,7 @@ status_t s6a_fd_init(const char *conffile) return CORE_OK; error: CHECK_FCT_DO( fd_core_shutdown(), ); - CHECK_FCT( fd_core_wait_shutdown_complete() ); + CHECK_FCT_DO( fd_core_wait_shutdown_complete(), ); return CORE_ERROR; } @@ -77,16 +77,21 @@ status_t s6a_fd_hss_init() d_error("s6a_fd_init() failed"); return rv; } - ret = fd_core_wait_shutdown_complete(); - if (ret != 0) - { - return CORE_ERROR; - d_error("fd_core_wait_shutdown_complete() failed"); - } + + CHECK_FCT_DO( fd_core_wait_shutdown_complete(), return CORE_ERROR; ); return CORE_OK; } +void s6a_fd_hss_final() +{ + int ret; + + s6a_app_final(); + + CHECK_FCT_DO( fd_core_shutdown(), d_error("fd_core_shutdown() failed") ); +} + status_t s6a_fd_mme_init() { status_t rv; @@ -101,17 +106,13 @@ status_t s6a_fd_mme_init() return CORE_OK; } -void s6a_fd_final() +void s6a_fd_mme_final() { - int ret; - s6a_app_final(); - ret = fd_core_shutdown(); - if (ret != 0) - { - d_error("fd_core_shutdown() failed"); - } + CHECK_FCT_DO( fd_core_shutdown(), d_error("fd_core_shutdown() failed") ); + CHECK_FCT_DO( fd_core_wait_shutdown_complete(), + d_error("fd_core_wait_shutdown_complete() failed")); } static void s6a_gnutls_log_func(int level, const char *str) diff --git a/lib/s6a/s6a_lib.h b/lib/s6a/s6a_lib.h index 693fbfe6d..46cdffa7b 100644 --- a/lib/s6a/s6a_lib.h +++ b/lib/s6a/s6a_lib.h @@ -28,11 +28,11 @@ struct s6a_fd_config_t { extern struct s6a_fd_config_t *s6a_fd_config; CORE_DECLARE(status_t) s6a_fd_hss_init(); +CORE_DECLARE(void) s6a_fd_hss_final(); CORE_DECLARE(status_t) s6a_fd_mme_init(); -CORE_DECLARE(void) s6a_fd_final(); +CORE_DECLARE(void) s6a_fd_mme_final(); CORE_DECLARE(status_t) s6a_fd_config_apply(); -CORE_DECLARE(void) s6a_fd_config_init(); CORE_DECLARE(char *) s6a_fd_hss_config(); CORE_DECLARE(char *) s6a_fd_mme_config(); diff --git a/main.c b/main.c index ddbd9cdad..d0c40058d 100644 --- a/main.c +++ b/main.c @@ -55,8 +55,6 @@ static int check_signal(int signum) d_info("%s received", signum == SIGTERM ? "SIGTERM" : "SIGINT"); - s6a_fd_final(); - threads_stop(); return 1; @@ -105,14 +103,14 @@ void logger_signal(int signum) } } -void test_signal(int signum) +void s6a_fd_hss_signal(int signum) { fprintf(stderr, "asdfsadfsadfsdafasdfsadf = %d\n", signum); switch (signum) { case SIGTERM: case SIGINT: - s6a_fd_final(); + s6a_fd_hss_final(); break; case SIGHUP: break; @@ -219,9 +217,9 @@ int main(int argc, char *argv[]) /* Child */ umask(027); - core_signal(SIGINT, test_signal); - core_signal(SIGTERM, test_signal); - core_signal(SIGHUP, test_signal); + core_signal(SIGINT, s6a_fd_hss_signal); + core_signal(SIGTERM, s6a_fd_hss_signal); + core_signal(SIGHUP, s6a_fd_hss_signal); s6a_fd_hss_init(); @@ -229,7 +227,6 @@ int main(int argc, char *argv[]) } /* Parent */ - s6a_fd_mme_init(); } { diff --git a/src/init.c b/src/init.c index fef32ba85..03f87802a 100644 --- a/src/init.c +++ b/src/init.c @@ -7,7 +7,7 @@ #include "core_debug.h" #include "core_thread.h" -#include "s6a_app.h" +#include "s6a_lib.h" #include "context.h" #include "event.h" @@ -24,14 +24,18 @@ status_t cellwire_initialize(char *config_path) srand(time(NULL)*getpid()); rv = context_init(); - if (rv != CORE_OK) - return rv; + if (rv != CORE_OK) return rv; + + rv = s6a_fd_mme_init(); + if (rv != CORE_OK) return rv; return CORE_OK; } void cellwire_terminate(void) { + s6a_fd_mme_final(); + context_final(); }