From: Christian Brauner Date: Fri, 1 Jun 2018 17:53:06 +0000 (+0200) Subject: tree-wide: handle EINTR in some read()/write() X-Git-Tag: lxc-3.1.0~273^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F2371%2Fhead;p=thirdparty%2Flxc.git tree-wide: handle EINTR in some read()/write() Signed-off-by: Christian Brauner --- diff --git a/src/lxc/conf.c b/src/lxc/conf.c index b67a90b6b..05d58081e 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -2332,11 +2332,11 @@ FILE *make_anonymous_mount_file(struct lxc_list *mount) mount_entry = iterator->elem; len = strlen(mount_entry); - ret = write(fd, mount_entry, len); + ret = lxc_write_nointr(fd, mount_entry, len); if (ret != len) goto on_error; - ret = write(fd, "\n", 1); + ret = lxc_write_nointr(fd, "\n", 1); if (ret != 1) goto on_error; } @@ -3951,7 +3951,7 @@ static int run_userns_fn(void *data) /* Wait for parent to finish establishing a new mapping in the user * namespace we are executing in. */ - if (read(d->p[0], &c, 1) != 1) + if (lxc_read_nointr(d->p[0], &c, 1) != 1) return -1; /* Close read end of the pipe. */ @@ -4224,7 +4224,7 @@ int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data, } /* Tell child to proceed. */ - if (write(p[1], &c, 1) != 1) { + if (lxc_write_nointr(p[1], &c, 1) != 1) { SYSERROR("Failed telling child process \"%d\" to proceed", pid); goto on_error; } @@ -4401,7 +4401,7 @@ int userns_exec_full(struct lxc_conf *conf, int (*fn)(void *), void *data, } /* Tell child to proceed. */ - if (write(p[1], &c, 1) != 1) { + if (lxc_write_nointr(p[1], &c, 1) != 1) { SYSERROR("Failed telling child process \"%d\" to proceed", pid); goto on_error; } diff --git a/src/lxc/start.c b/src/lxc/start.c index 882e37566..b222c847a 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -340,7 +340,7 @@ static int signal_handler(int fd, uint32_t events, void *data, struct signalfd_siginfo siginfo; struct lxc_handler *hdlr = data; - ret = read(fd, &siginfo, sizeof(siginfo)); + ret = lxc_read_nointr(fd, &siginfo, sizeof(siginfo)); if (ret < 0) { ERROR("Failed to read signal info from signal file descriptor %d", fd); return LXC_MAINLOOP_ERROR;