diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2021-01-14 13:37:16 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-14 13:37:16 -0500 |
commit | a1b49749af97c5a3b6256b5aa0f53897257bc838 (patch) | |
tree | 3aa0413a7fabc7faff920018b66dae54bc86120e /libpod/container_api.go | |
parent | e0211a14fc58657821a2af92d09f115470a38c36 (diff) | |
parent | d54478d8eaec9481d482942b87065af36995d39a (diff) | |
download | podman-a1b49749af97c5a3b6256b5aa0f53897257bc838.tar.gz podman-a1b49749af97c5a3b6256b5aa0f53897257bc838.tar.bz2 podman-a1b49749af97c5a3b6256b5aa0f53897257bc838.zip |
Merge pull request #8906 from vrothberg/fix-8501
container stop: release lock before calling the runtime
Diffstat (limited to 'libpod/container_api.go')
-rw-r--r-- | libpod/container_api.go | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/libpod/container_api.go b/libpod/container_api.go index 87ff764e3..0d62a2dd7 100644 --- a/libpod/container_api.go +++ b/libpod/container_api.go @@ -210,7 +210,13 @@ func (c *Container) Kill(signal uint) error { } // TODO: Is killing a paused container OK? - if c.state.State != define.ContainerStateRunning { + switch c.state.State { + case define.ContainerStateRunning, define.ContainerStateStopping: + // Note that killing containers in "stopping" state is okay. + // In that state, the Podman is waiting for the runtime to + // stop the container and if that is taking too long, a user + // may have decided to kill the container after all. + default: return errors.Wrapf(define.ErrCtrStateInvalid, "can only kill running containers. %s is in state %s", c.ID(), c.state.State.String()) } @@ -539,7 +545,7 @@ func (c *Container) Cleanup(ctx context.Context) error { } // Check if state is good - if !c.ensureState(define.ContainerStateConfigured, define.ContainerStateCreated, define.ContainerStateStopped, define.ContainerStateExited) { + if !c.ensureState(define.ContainerStateConfigured, define.ContainerStateCreated, define.ContainerStateStopped, define.ContainerStateStopping, define.ContainerStateExited) { return errors.Wrapf(define.ErrCtrStateInvalid, "container %s is running or paused, refusing to clean up", c.ID()) } |