mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
runsc: fix panic for runsc wait on stopped container.
PiperOrigin-RevId: 203016694 Change-Id: Ic51ef754aa6d7d1b3b35491aff96a63d7992e122
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user