summaryrefslogtreecommitdiffhomepage
path: root/runsc/sandbox/sandbox.go
diff options
context:
space:
mode:
Diffstat (limited to 'runsc/sandbox/sandbox.go')
-rw-r--r--runsc/sandbox/sandbox.go20
1 files changed, 20 insertions, 0 deletions
diff --git a/runsc/sandbox/sandbox.go b/runsc/sandbox/sandbox.go
index ed2c40e57..e1e7b39d1 100644
--- a/runsc/sandbox/sandbox.go
+++ b/runsc/sandbox/sandbox.go
@@ -434,9 +434,29 @@ func (s *Sandbox) Wait(cid string) (syscall.WaitStatus, error) {
if err := conn.Call(boot.ContainerWait, &cid, &ws); err != nil {
return ws, fmt.Errorf("err waiting on container %q: %v", cid, err)
}
+
+ if s.IsRootContainer(cid) {
+ // If waiting for the root, give some time for the sandbox process to exit
+ // to prevent races with resources that might still be in use.
+ timeout := time.Now().Add(time.Second)
+ log.Debugf("Waiting for the sandbox process to exit")
+ for s.IsRunning() {
+ if time.Now().After(timeout) {
+ log.Debugf("Timeout waiting for sandbox process to exit")
+ break
+ }
+ time.Sleep(100 * time.Millisecond)
+ }
+ }
return ws, nil
}
+// IsRootContainer returns true if the specified container ID belongs to the
+// root container.
+func (s *Sandbox) IsRootContainer(cid string) bool {
+ return s.ID == cid
+}
+
// Stop stops the container in the sandbox.
func (s *Sandbox) Stop(cid string) error {
// TODO: This should stop the container with the given ID