libcontainer: handle EINTR from minijail_wait
minijail_wait will pass EINTR up if the call to waitpid is interrupted.
Handle that return in libcontainer.
BUG=none
TEST=start and stop containers, didn't simulate EINTER being returned.
Change-Id: I5c20e9e225baee5794c6683fc2832b1357ad1a95
Signed-off-by: Dylan Reid <dgreid@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/340373
Reviewed-by: Ricky Zhou <rickyz@chromium.org>
diff --git a/libcontainer/libcontainer.c b/libcontainer/libcontainer.c
index 58c79be..c11017c 100644
--- a/libcontainer/libcontainer.c
+++ b/libcontainer/libcontainer.c
@@ -650,8 +650,15 @@
int container_wait(struct container *c)
{
- minijail_wait(c->jail);
- return container_teardown(c);
+ int rc;
+
+ do {
+ rc = minijail_wait(c->jail);
+ } while (rc == -1 && errno == EINTR);
+
+ if (rc == 0)
+ rc = container_teardown(c);
+ return rc;
}
int container_kill(struct container *c)