irqbalance/fix-resource-leak-on-the-error-paths-in-main.patch
2019-12-25 22:08:07 +08:00

71 lines
1.7 KiB
Diff

From 4bddf961e18f59b27301b73895c0ae3a6cde9b7b Mon Sep 17 00:00:00 2001
From: liuchao173 <liuchao173@huawei.com>
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 <yeyunfeng@huawei.com>
---
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