Commit 15cd25fd by Daniel Lezcano

do not exit mainloop when child is stopped

When the init container is stopped, we don't check this condition and we assume the child exited and we wait indefinitely for the child to exit while this one is stopped. Signed-off-by: 's avatarDaniel Lezcano <dlezcano@fr.ibm.com>
parent f2faa8fa
...@@ -45,9 +45,31 @@ ...@@ -45,9 +45,31 @@
#include <sys/un.h> #include <sys/un.h>
#include <sys/poll.h> #include <sys/poll.h>
#ifdef HAVE_SYS_SIGNALFD_H #ifdef HAVE_SYS_SIGNALFD_H
# include <sys/signalfd.h> # include <sys/signalfd.h>
#else #else
/* assume kernel headers are too old */
struct signalfd_siginfo
{
uint32_t ssi_signo;
int32_t ssi_errno;
int32_t ssi_code;
uint32_t ssi_pid;
uint32_t ssi_uid;
int32_t ssi_fd;
uint32_t ssi_tid;
uint32_t ssi_band;
uint32_t ssi_overrun;
uint32_t ssi_trapno;
int32_t ssi_status;
int32_t ssi_int;
uint64_t ssi_ptr;
uint64_t ssi_utime;
uint64_t ssi_stime;
uint64_t ssi_addr;
uint8_t __pad[48];
};
# ifndef __NR_signalfd4 # ifndef __NR_signalfd4
/* assume kernel headers are too old */ /* assume kernel headers are too old */
# if __i386__ # if __i386__
...@@ -198,11 +220,30 @@ static int setup_sigchld_fd(sigset_t *oldmask) ...@@ -198,11 +220,30 @@ static int setup_sigchld_fd(sigset_t *oldmask)
return fd; return fd;
} }
static int sigchld_handler(int fd, void *data, static int sigchld_handler(int fd, void *data,
struct lxc_epoll_descr *descr) struct lxc_epoll_descr *descr)
{ {
DEBUG("child exited"); struct signalfd_siginfo siginfo;
int ret;
ret = read(fd, &siginfo, sizeof(siginfo));
if (ret < 0) {
ERROR("failed to read sigchld info");
return -1;
}
if (ret != sizeof(siginfo)) {
ERROR("unexpected siginfo size");
return -1;
}
if (siginfo.ssi_code == CLD_STOPPED ||
siginfo.ssi_code == CLD_CONTINUED) {
INFO("container init process was stopped/continued");
return 0;
}
DEBUG("container init process exited");
return 1; return 1;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment