diff options
author | zhangguanzhang <guanzhangzhang@gmail.com> | 2020-06-12 19:54:10 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-12 19:54:10 +0800 |
commit | 64eae15aa7905dd49f4a348f6b4765dfb4d9dd91 (patch) | |
tree | 2914c20a2e0e15383da50334cad89b9b85b209a1 /libpod/container_internal.go | |
parent | 3218736cff4b718b8fe855759687cb66f19d6e1e (diff) | |
parent | 8aa5cf3d45998bc92eaafd67ab2a59e3722bade4 (diff) | |
download | podman-64eae15aa7905dd49f4a348f6b4765dfb4d9dd91.tar.gz podman-64eae15aa7905dd49f4a348f6b4765dfb4d9dd91.tar.bz2 podman-64eae15aa7905dd49f4a348f6b4765dfb4d9dd91.zip |
Merge pull request #1 from containers/master
# sync
Diffstat (limited to 'libpod/container_internal.go')
-rw-r--r-- | libpod/container_internal.go | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/libpod/container_internal.go b/libpod/container_internal.go index 43e873bd6..f6fc3c1a4 100644 --- a/libpod/container_internal.go +++ b/libpod/container_internal.go @@ -1209,13 +1209,35 @@ func (c *Container) stop(timeout uint) error { } } + // Check if conmon is still alive. + // If it is not, we won't be getting an exit file. + conmonAlive, err := c.ociRuntime.CheckConmonRunning(c) + if err != nil { + return err + } + if err := c.ociRuntime.StopContainer(c, timeout, all); err != nil { return err } + c.newContainerEvent(events.Stop) + c.state.PID = 0 c.state.ConmonPID = 0 c.state.StoppedByUser = true + + if !conmonAlive { + // Conmon is dead, so we can't epect an exit code. + c.state.ExitCode = -1 + c.state.FinishedTime = time.Now() + c.state.State = define.ContainerStateStopped + if err := c.save(); err != nil { + logrus.Errorf("Error saving container %s status: %v", c.ID(), err) + } + + return errors.Wrapf(define.ErrConmonDead, "container %s conmon process missing, cannot retrieve exit code", c.ID()) + } + if err := c.save(); err != nil { return errors.Wrapf(err, "error saving container %s state after stopping", c.ID()) } @@ -1225,8 +1247,6 @@ func (c *Container) stop(timeout uint) error { return err } - c.newContainerEvent(events.Stop) - return nil } |