From 0cf0ee283b8a986c53af1825ff3f4027d7b94669 Mon Sep 17 00:00:00 2001 From: Darek Stojaczyk Date: Tue, 8 Oct 2019 09:10:43 +0000 Subject: [PATCH] app: free config object on failed app start Set g_spdk_app.config early in the app init function, so that the subsequently called spdk_app_fini() will free it. So far the dynamicaly allocated config object would be just leaked. Signed-off-by: Darek Stojaczyk Change-Id: I19ffc8bc80858d954166649f825e573f83b4bf53 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/470734 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto --- lib/event/app.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/lib/event/app.c b/lib/event/app.c index eb16ca9f6..a4a0ad1eb 100644 --- a/lib/event/app.c +++ b/lib/event/app.c @@ -612,18 +612,27 @@ spdk_app_start(struct spdk_app_opts *opts, spdk_msg_fn start_fn, config = spdk_app_setup_conf(opts->config_file); if (config == NULL) { - goto app_start_setup_conf_err; + return 1; } if (spdk_app_read_config_file_global_params(opts) < 0) { - goto app_start_setup_conf_err; + spdk_conf_free(config); + return 1; } + memset(&g_spdk_app, 0, sizeof(g_spdk_app)); + g_spdk_app.config = config; + g_spdk_app.json_config_file = opts->json_config_file; + g_spdk_app.rpc_addr = opts->rpc_addr; + g_spdk_app.shm_id = opts->shm_id; + g_spdk_app.shutdown_cb = opts->shutdown_cb; + g_spdk_app.rc = 0; + spdk_log_set_level(SPDK_APP_DEFAULT_LOG_LEVEL); spdk_log_set_backtrace_level(SPDK_APP_DEFAULT_BACKTRACE_LOG_LEVEL); if (spdk_app_setup_env(opts) < 0) { - goto app_start_setup_conf_err; + return 1; } spdk_log_open(opts->log); @@ -672,14 +681,6 @@ spdk_app_start(struct spdk_app_opts *opts, spdk_msg_fn start_fn, goto app_start_trace_cleanup_err; } - memset(&g_spdk_app, 0, sizeof(g_spdk_app)); - g_spdk_app.config = config; - g_spdk_app.json_config_file = opts->json_config_file; - g_spdk_app.rpc_addr = opts->rpc_addr; - g_spdk_app.shm_id = opts->shm_id; - g_spdk_app.shutdown_cb = opts->shutdown_cb; - g_spdk_app.rc = 0; - g_delay_subsystem_init = opts->delay_subsystem_init; g_start_fn = start_fn; g_start_arg = arg1; @@ -696,8 +697,6 @@ app_start_trace_cleanup_err: app_start_log_close_err: spdk_log_close(); - -app_start_setup_conf_err: return 1; }