From eab9ac80148b6c70dd025c18ecac86fae6d6bf8e Mon Sep 17 00:00:00 2001 From: Yunfeng Ye Date: Sun, 20 Oct 2019 22:48:22 +0800 Subject: [PATCH 28/53] fix resource leak on the error paths in main() Currently, both checking for core count < 2 and init_socket() fail, just return directly, so lead to resource leak. Make it correct to free resource when on these situation. Signed-off-by: Yunfeng Ye --- irqbalance.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/irqbalance.c b/irqbalance.c index e53bf65..3ff5f13 100644 --- a/irqbalance.c +++ b/irqbalance.c @@ -547,6 +547,7 @@ int init_socket() int main(int argc, char** argv) { sigset_t sigset, old_sigset; + int ret = EXIT_SUCCESS; sigemptyset(&sigset); sigaddset(&sigset,SIGINT); @@ -637,7 +638,7 @@ int main(int argc, char** argv) "single cpu. Shutting down\n"; log(TO_ALL, LOG_WARNING, "%s", msg); - exit(EXIT_SUCCESS); + goto out; } @@ -660,7 +661,8 @@ int main(int argc, char** argv) parse_proc_stat(); if (init_socket()) { - return EXIT_FAILURE; + ret = EXIT_FAILURE; + goto out; } main_loop = g_main_loop_new(NULL, FALSE); last_interval = sleep_interval; @@ -669,6 +671,7 @@ int main(int argc, char** argv) g_main_loop_quit(main_loop); +out: free_object_tree(); free_cl_opts(); @@ -676,9 +679,10 @@ int main(int argc, char** argv) if (!foreground_mode && pidfile) unlink(pidfile); /* Remove socket */ - close(socket_fd); + if (socket_fd > 0) + close(socket_fd); if (socket_name[0]) unlink(socket_name); - return EXIT_SUCCESS; + return ret; } -- 2.23.0