]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
log: handle EINTR in read()
authorChristian Brauner <christian.brauner@ubuntu.com>
Sun, 29 Jul 2018 21:54:32 +0000 (23:54 +0200)
committerChristian Brauner <christian.brauner@ubuntu.com>
Sun, 29 Jul 2018 22:16:41 +0000 (00:16 +0200)
We don't want to link log.{c,h} against utils.{c,h} for the sake of our static
builds init.lxc.static. This means lxc_write_nointr() will not be available. So
handle it EINTR.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/log.c

index dafda1b957eb4cdab39d8862c83af61907daae3d..388f91ba097d66681af4a9403cb106db4722795c 100644 (file)
@@ -290,7 +290,8 @@ static int log_append_logfile(const struct lxc_log_appender *appender,
 {
        char buffer[LXC_LOG_BUFFER_SIZE];
        char date_time[LXC_LOG_TIME_SIZE];
-       int n, ret;
+       int n;
+       ssize_t ret;
        int fd_to_use = -1;
        const char *log_container_name = log_vmname;
 
@@ -340,7 +341,12 @@ static int log_append_logfile(const struct lxc_log_appender *appender,
 
        buffer[n] = '\n';
 
-       return write(fd_to_use, buffer, n + 1);
+again:
+       ret = write(fd_to_use, buffer, n + 1);
+       if (ret < 0 && errno == EINTR)
+               goto again;
+
+       return ret;
 }
 
 static struct lxc_log_appender log_appender_syslog = {