From 0c749d504e98dddde3c39025b03744198a667fcc Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 20 Apr 2011 04:12:15 +0200 Subject: [PATCH 1/1] nspawn: don't fail when we receive SIGCHLD https://bugs.freedesktop.org/show_bug.cgi?id=36148 --- TODO | 3 --- src/nspawn.c | 9 ++++++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/TODO b/TODO index 326acaf83..f90e53380 100644 --- a/TODO +++ b/TODO @@ -22,9 +22,6 @@ F15: * New Avahi package, enable it by default -* don't trim empty cgroups - https://bugzilla.redhat.com/show_bug.cgi?id=678555 - * make anaconda write timeout=0 for encrypted devices * Fix assert http://lists.freedesktop.org/archives/systemd-devel/2011-April/001910.html diff --git a/src/nspawn.c b/src/nspawn.c index 6b0ba4e57..969c96189 100644 --- a/src/nspawn.c +++ b/src/nspawn.c @@ -374,6 +374,7 @@ static int is_os_tree(const char *path) { #define BUFFER_SIZE 1024 static int process_pty(int master, sigset_t *mask) { + char in_buffer[BUFFER_SIZE], out_buffer[BUFFER_SIZE]; size_t in_buffer_full = 0, out_buffer_full = 0; struct epoll_event stdin_ev, stdout_ev, master_ev, signal_ev; @@ -464,11 +465,13 @@ static int process_pty(int master, sigset_t *mask) { if ((n = read(signal_fd, &sfsi, sizeof(sfsi))) != sizeof(sfsi)) { if (n >= 0) { + log_error("Failed to read from signalfd: invalid block size"); r = -EIO; goto finish; } if (errno != EINTR && errno != EAGAIN) { + log_error("Failed to read from signalfd: %m"); r = -errno; goto finish; } @@ -481,7 +484,7 @@ static int process_pty(int master, sigset_t *mask) { if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) >= 0) ioctl(master, TIOCSWINSZ, &ws); } else { - r = -EINTR; + r = 0; goto finish; } } @@ -501,6 +504,7 @@ static int process_pty(int master, sigset_t *mask) { stdin_readable = false; else { log_error("read(): %m"); + r = -errno; goto finish; } } else @@ -515,6 +519,7 @@ static int process_pty(int master, sigset_t *mask) { master_writable = false; else { log_error("write(): %m"); + r = -errno; goto finish; } @@ -533,6 +538,7 @@ static int process_pty(int master, sigset_t *mask) { master_readable = false; else { log_error("read(): %m"); + r = -errno; goto finish; } } else @@ -547,6 +553,7 @@ static int process_pty(int master, sigset_t *mask) { stdout_writable = false; else { log_error("write(): %m"); + r = -errno; goto finish; } -- 2.30.2