diff options
author | Matthew Heon <matthew.heon@pm.me> | 2020-05-13 09:17:36 -0400 |
---|---|---|
committer | Matthew Heon <matthew.heon@pm.me> | 2020-05-14 16:56:02 -0400 |
commit | 0c3bed119b16e90534172410f70713591ecafc4c (patch) | |
tree | 9c5657fb280a2644b24de7ac2fdc11e2704ad871 | |
parent | 2b08359fafae5f551e7ce27ff797b0d2e3df2d2c (diff) | |
download | podman-0c3bed119b16e90534172410f70713591ecafc4c.tar.gz podman-0c3bed119b16e90534172410f70713591ecafc4c.tar.bz2 podman-0c3bed119b16e90534172410f70713591ecafc4c.zip |
Remove exec sessions on container restart
With APIv2, we cannot guarantee that exec sessions will be
removed cleanly on exit (Docker does not include an API for
removing exec sessions, instead using a timer-based reaper which
we cannot easily replicate). This is part 1 of a 2-part approach
to providing a solution to this. This ensures that exec sessions
will be reaped, at the very least, on container restart, which
takes care of any that were not properly removed during the run
of a container.
Signed-off-by: Matthew Heon <matthew.heon@pm.me>
-rw-r--r-- | libpod/container_internal.go | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/libpod/container_internal.go b/libpod/container_internal.go index 5baa5fc1c..13b986cac 100644 --- a/libpod/container_internal.go +++ b/libpod/container_internal.go @@ -1011,6 +1011,14 @@ func (c *Container) init(ctx context.Context, retainRetries bool) error { logrus.Debugf("Created container %s in OCI runtime", c.ID()) + // Remove any exec sessions leftover from a potential prior run. + if len(c.state.ExecSessions) > 0 { + if err := c.runtime.state.RemoveContainerExecSessions(c); err != nil { + logrus.Errorf("Error removing container %s exec sessions from DB: %v", err) + } + c.state.ExecSessions = make(map[string]*ExecSession) + } + c.state.ExitCode = 0 c.state.Exited = false c.state.State = define.ContainerStateCreated |