From a4555c34304aee9b825be3879c54cedcb5a7dbae Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 1 Dec 2019 13:15:52 +0100 Subject: check for osmo_fsm_register() failures and propagate error Change-Id: Id8861144e4880383a173b7e6ae7860beebac09d9 --- examples/sccp_demo_user.c | 2 +- src/osmo_ss7.c | 23 ++++++++++++++++++----- stp/stp_main.c | 2 +- tests/ss7/ss7_test.c | 2 +- tests/vty/ss7_asp_vty_test.c | 2 +- 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/examples/sccp_demo_user.c b/examples/sccp_demo_user.c index 28dd166..b55b50c 100644 --- a/examples/sccp_demo_user.c +++ b/examples/sccp_demo_user.c @@ -230,7 +230,7 @@ int main(int argc, char **argv) signal(SIGUSR2, &signal_handler); init_logging(); - osmo_ss7_init(); + OSMO_ASSERT(osmo_ss7_init() == 0); osmo_fsm_log_addr(false); vty_init(&vty_info); osmo_ss7_vty_init_asp(NULL); diff --git a/src/osmo_ss7.c b/src/osmo_ss7.c index a07fbed..1ca8b5e 100644 --- a/src/osmo_ss7.c +++ b/src/osmo_ss7.c @@ -2061,13 +2061,26 @@ bool osmo_ss7_pc_is_local(struct osmo_ss7_instance *inst, uint32_t pc) int osmo_ss7_init(void) { + int rc; + if (ss7_initialized) return 1; - osmo_fsm_register(&sccp_scoc_fsm); - osmo_fsm_register(&xua_as_fsm); - osmo_fsm_register(&xua_asp_fsm); - osmo_fsm_register(&ipa_asp_fsm); - osmo_fsm_register(&xua_default_lm_fsm); + rc = osmo_fsm_register(&sccp_scoc_fsm); + if (rc < 0) + return rc; + rc = osmo_fsm_register(&xua_as_fsm); + if (rc < 0) + return rc; + rc = osmo_fsm_register(&xua_asp_fsm); + if (rc < 0) + return rc; + rc = osmo_fsm_register(&ipa_asp_fsm); + if (rc < 0) + return rc; + rc = osmo_fsm_register(&xua_default_lm_fsm); + if (rc < 0) + return rc; + ss7_initialized = true; return 0; } diff --git a/stp/stp_main.c b/stp/stp_main.c index 4cc2586..3923ed2 100644 --- a/stp/stp_main.c +++ b/stp/stp_main.c @@ -175,7 +175,7 @@ int main(int argc, char **argv) fputs(stp_copyright, stdout); fputs("\n", stdout); - osmo_ss7_init(); + OSMO_ASSERT(osmo_ss7_init() == 0); osmo_fsm_log_addr(false); logging_vty_add_cmds(); osmo_stats_vty_add_cmds(); diff --git a/tests/ss7/ss7_test.c b/tests/ss7/ss7_test.c index a3f47b6..ae96a4b 100644 --- a/tests/ss7/ss7_test.c +++ b/tests/ss7/ss7_test.c @@ -302,7 +302,7 @@ int main(int argc, char **argv) osmo_fsm_log_addr(false); /* init */ - osmo_ss7_init(); + OSMO_ASSERT(osmo_ss7_init() == 0); s7i = osmo_ss7_instance_find_or_create(NULL, 0); OSMO_ASSERT(osmo_ss7_instance_find(0) == s7i); OSMO_ASSERT(osmo_ss7_instance_find(23) == NULL); diff --git a/tests/vty/ss7_asp_vty_test.c b/tests/vty/ss7_asp_vty_test.c index 76ffcf2..eb575bc 100644 --- a/tests/vty/ss7_asp_vty_test.c +++ b/tests/vty/ss7_asp_vty_test.c @@ -164,7 +164,7 @@ int main(int argc, char **argv) osmo_init_logging2(root_ctx, &log_info); logging_vty_add_cmds(); - osmo_ss7_init(); + OSMO_ASSERT(osmo_ss7_init() == 0); osmo_ss7_vty_init_asp(root_ctx); osmo_sccp_vty_init(); -- cgit v1.2.3