summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Heon <matthew.heon@pm.me>2020-05-13 09:17:36 -0400
committerMatthew Heon <matthew.heon@pm.me>2020-05-14 16:56:02 -0400
commit0c3bed119b16e90534172410f70713591ecafc4c (patch)
tree9c5657fb280a2644b24de7ac2fdc11e2704ad871
parent2b08359fafae5f551e7ce27ff797b0d2e3df2d2c (diff)
downloadpodman-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.go8
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