summaryrefslogtreecommitdiff
path: root/mesh/main.c
diff options
context:
space:
mode:
authorInga Stotland <inga.stotland@intel.com>2018-03-26 09:57:04 -0700
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2018-03-27 13:59:16 +0300
commit0a2a2b0c7f41b155432115e1153adce26f45edc2 (patch)
treecb32b69e9a9bb450650f0aa9eaba01bdcd7e85d6 /mesh/main.c
parent62168ef6e12925fa42407f4d888cc140a085d7b8 (diff)
downloadbluez-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.c14
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;
}