irqbalance/fix-resource-leak-on-the-error-paths-in-main.patch
2020-07-03 17:09:39 +08:00

71 lines
1.6 KiB
Diff

From eab9ac80148b6c70dd025c18ecac86fae6d6bf8e Mon Sep 17 00:00:00 2001
From: Yunfeng Ye <yeyunfeng@huawei.com>
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 <yeyunfeng@huawei.com>
---
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