runsc: fix panic for runsc wait on stopped container.

PiperOrigin-RevId: 203016694
Change-Id: Ic51ef754aa6d7d1b3b35491aff96a63d7992e122
This commit is contained in:
Lantao Liu
2018-07-02 14:52:21 -07:00
committed by Shentubot
parent fa64c2a151
commit 126296ce2a
2 changed files with 15 additions and 0 deletions
+9
View File
@@ -352,6 +352,9 @@ func (c *Container) Pid() int {
// Wait waits for the container to exit, and returns its WaitStatus.
func (c *Container) Wait() (syscall.WaitStatus, error) {
log.Debugf("Wait on container %q", c.ID)
if c.Status == Stopped {
return 0, fmt.Errorf("container is stopped")
}
return c.Sandbox.Wait(c.ID)
}
@@ -359,6 +362,9 @@ func (c *Container) Wait() (syscall.WaitStatus, error) {
// returns its WaitStatus.
func (c *Container) WaitRootPID(pid int32) (syscall.WaitStatus, error) {
log.Debugf("Wait on pid %d in sandbox %q", pid, c.Sandbox.ID)
if c.Status == Stopped {
return 0, fmt.Errorf("container is stopped")
}
return c.Sandbox.WaitPID(pid, c.Sandbox.ID)
}
@@ -366,6 +372,9 @@ func (c *Container) WaitRootPID(pid int32) (syscall.WaitStatus, error) {
// its WaitStatus.
func (c *Container) WaitPID(pid int32) (syscall.WaitStatus, error) {
log.Debugf("Wait on pid %d in container %q", pid, c.ID)
if c.Status == Stopped {
return 0, fmt.Errorf("container is stopped")
}
return c.Sandbox.WaitPID(pid, c.ID)
}
+6
View File
@@ -1211,6 +1211,9 @@ func TestMultiContainerWait(t *testing.T) {
} else if es := ws.ExitStatus(); es != 0 {
t.Errorf("process %q exited with non-zero status %d", strings.Join(containers[1].Spec.Process.Args, " "), es)
}
if _, err := containers[1].Wait(); err == nil {
t.Errorf("wait for stopped process %q should fail", strings.Join(containers[1].Spec.Process.Args, " "))
}
// After Wait returns, ensure that the root container is running and
// the child has finished.
@@ -1231,6 +1234,9 @@ func TestMultiContainerWait(t *testing.T) {
} else if es := ws.ExitStatus(); es != 0 {
t.Errorf("PID %d exited with non-zero status %d", pid, es)
}
if _, err := containers[0].WaitPID(pid); err == nil {
t.Errorf("wait for stopped PID %d should fail", pid)
}
}()
}