Return-Path: MIME-Version: 1.0 In-Reply-To: <20180326165704.10399-1-inga.stotland@intel.com> References: <20180326165704.10399-1-inga.stotland@intel.com> From: Luiz Augusto von Dentz Date: Tue, 27 Mar 2018 14:09:48 +0300 Message-ID: Subject: Re: [PATCH BlueZ v2] mesh/meshctl: Exit cleanly if start up fails To: Inga Stotland Cc: "linux-bluetooth@vger.kernel.org" Content-Type: text/plain; charset="UTF-8" Sender: linux-bluetooth-owner@vger.kernel.org List-ID: Hi Inga, On Mon, Mar 26, 2018 at 7:57 PM, Inga Stotland wrote: > 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. > --- > mesh/main.c | 14 +++++++++----- > 1 file 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; > } > -- > 2.13.6 Applied, thanks. -- Luiz Augusto von Dentz