From 4bddf961e18f59b27301b73895c0ae3a6cde9b7b Mon Sep 17 00:00:00 2001 From: liuchao173 Date: Thu, 7 Nov 2019 09:38:21 +0000 Subject: [PATCH 8/8] backport: 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 cace4d8..5e5ef9b 100644 --- a/irqbalance.c +++ b/irqbalance.c @@ -556,6 +556,7 @@ int init_socket() int main(int argc, char** argv) { sigset_t sigset, old_sigset; + int ret = EXIT_SUCCESS; sigemptyset(&sigset); sigaddset(&sigset,SIGINT); @@ -636,7 +637,7 @@ int main(int argc, char** argv) "single cpu. Shutting down\n"; log(TO_ALL, LOG_WARNING, "%s", msg); - exit(EXIT_SUCCESS); + goto out; } if (!foreground_mode) { @@ -673,7 +674,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); int *last_interval = &sleep_interval; @@ -682,6 +684,7 @@ int main(int argc, char** argv) g_main_loop_quit(main_loop); +out: free_object_tree(); free_cl_opts(); @@ -689,9 +692,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.19.1