diff options
author | Inga Stotland <inga.stotland@intel.com> | 2018-03-26 09:57:04 -0700 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2018-03-27 13:59:16 +0300 |
commit | 0a2a2b0c7f41b155432115e1153adce26f45edc2 (patch) | |
tree | cb32b69e9a9bb450650f0aa9eaba01bdcd7e85d6 /mesh/main.c | |
parent | 62168ef6e12925fa42407f4d888cc140a085d7b8 (diff) | |
download | bluez-0a2a2b0c7f41b155432115e1153adce26f45edc2.tar.gz |
mesh/meshctl: Exit cleanly if start up fails
This addresses the following issue: if the program exits
after bt_shell_init() has been called, but prior to calling
bt_shell_run() (e.g., failing to start meshctl due to invalid
input configuration), the original shell is messed up after that.
Calling bt_shell_cleanup() on faiure fixes this.
Diffstat (limited to 'mesh/main.c')
-rw-r--r-- | mesh/main.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/mesh/main.c b/mesh/main.c index d991c9f8c..d0f71c2d9 100644 --- a/mesh/main.c +++ b/mesh/main.c @@ -1930,11 +1930,11 @@ int main(int argc, char *argv[]) mesh_local_config_filename = g_malloc(len + strlen("local_node.json") + 2); if (!mesh_local_config_filename) - exit(1); + goto fail; mesh_prov_db_filename = g_malloc(len + strlen("prov_db.json") + 2); if (!mesh_prov_db_filename) { - exit(1); + goto fail; } sprintf(mesh_local_config_filename, "%s", mesh_config_dir); @@ -1950,7 +1950,7 @@ int main(int argc, char *argv[]) if (!prov_db_read_local_node(mesh_local_config_filename, true)) { g_printerr("Failed to parse local node configuration file %s\n", mesh_local_config_filename); - exit(1); + goto fail; } sprintf(mesh_prov_db_filename, "%s", mesh_config_dir); @@ -1965,7 +1965,7 @@ int main(int argc, char *argv[]) if (!prov_db_read(mesh_prov_db_filename)) { g_printerr("Failed to parse provisioning database file %s\n", mesh_prov_db_filename); - exit(1); + goto fail; } dbus_conn = g_dbus_setup_bus(DBUS_BUS_SYSTEM, NULL, NULL); @@ -2001,5 +2001,9 @@ int main(int argc, char *argv[]) g_list_free(service_list); g_list_free_full(ctrl_list, proxy_leak); - return 0; + return EXIT_SUCCESS; + +fail: + bt_shell_cleanup(); + return EXIT_FAILURE; } |