[CRIU] [PATCH 1/5] log: don't use global variables for saving service fds

Andrey Vagin avagin at openvz.org
Sun Jan 6 05:48:12 EST 2013


It's preparation for cloning service descriptors

Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
 log.c | 39 +++++++++++++++++++++++++--------------
 1 file changed, 25 insertions(+), 14 deletions(-)

diff --git a/log.c b/log.c
index 5fa1c6b..d4643ad 100644
--- a/log.c
+++ b/log.c
@@ -20,8 +20,8 @@
 #define DEFAULT_LOGFD		STDERR_FILENO
 
 static unsigned int current_loglevel = DEFAULT_LOGLEVEL;
-static int current_logfd = DEFAULT_LOGFD;
-static int logdir = -1;
+static bool log_fd_inited = false;
+static bool log_dir_inited = false;
 
 static char buffer[PAGE_SIZE];
 static char buf_off = 0;
@@ -55,16 +55,18 @@ static void print_ts(void)
 	buffer[TS_BUF_OFF - 1] = ' '; /* kill the '\0' produced by snprintf */
 }
 
-
-
 int log_get_fd(void)
 {
-	return current_logfd;
+	if (log_fd_inited)
+		return get_service_fd(LOG_FD_OFF);
+	else
+		return DEFAULT_LOGFD;
 }
 
 int log_init(const char *output)
 {
 	int new_logfd, sfd, dfd;
+	int logfd = log_get_fd();
 
 	gettimeofday(&start, NULL);
 	buf_off = TS_BUF_OFF;
@@ -75,7 +77,7 @@ int log_init(const char *output)
 		goto err;
 	}
 
-	if (logdir < 0) {
+	if (!log_dir_inited) {
 		int tmp;
 		tmp = open(".", O_RDONLY);
 		if (tmp == -1) {
@@ -86,7 +88,7 @@ int log_init(const char *output)
 		if (reopen_fd_as(dfd, tmp) < 0)
 			return -1;
 
-		logdir = dfd;
+		log_dir_inited = true;
 	}
 
 	sfd = get_service_fd(LOG_FD_OFF);
@@ -96,14 +98,14 @@ int log_init(const char *output)
 	}
 
 	if (output) {
-		new_logfd = openat(logdir, output,
+		new_logfd = openat(dfd, output,
 					O_CREAT | O_TRUNC | O_WRONLY | O_APPEND, 0600);
 		if (new_logfd < 0) {
 			pr_perror("Can't create log file %s", output);
 			return -1;
 		}
 
-		if (sfd == current_logfd)
+		if (sfd == logfd)
 			close(sfd);
 
 		if (reopen_fd_as(sfd, new_logfd) < 0)
@@ -116,7 +118,7 @@ int log_init(const char *output)
 		}
 	}
 
-	current_logfd = sfd;
+	log_fd_inited = true;
 
 	return 0;
 
@@ -151,15 +153,24 @@ int log_init_by_pid(void)
 
 void log_fini(void)
 {
-	if (current_logfd > 2)
-		close_safe(&current_logfd);
+	int logfd = get_service_fd(LOG_FD_OFF);
 
-	current_logfd = DEFAULT_LOGFD;
+	if (!log_fd_inited)
+		return;
+
+	close_safe(&logfd);
+	log_fd_inited = false;
 }
 
 void log_closedir(void)
 {
+	int logdir = get_service_fd(LOG_DIR_FD_OFF);
+
+	if (!log_dir_inited)
+		return;
+
 	close_safe(&logdir);
+	log_dir_inited = false;
 }
 
 void log_set_loglevel(unsigned int level)
@@ -186,7 +197,7 @@ void print_on_level(unsigned int loglevel, const char *format, ...)
 	} else {
 		if (loglevel > current_loglevel)
 			return;
-		fd = current_logfd;
+		fd = log_get_fd();
 		print_ts();
 		off = 0;
 	}
-- 
1.7.11.7



More information about the CRIU mailing list