summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiuseppe Scrivano <gscrivan@redhat.com>2021-12-01 13:41:02 +0100
committerMatthew Heon <mheon@redhat.com>2021-12-06 15:39:38 -0500
commitaa9799b81f4d24c965221ca762ab573e5eae75eb (patch)
treedce2def10ed792f7a372c1f81f481ef2c7571e0b
parent39318f177965b3fa49cb4343c6a8c224836febd6 (diff)
downloadpodman-aa9799b81f4d24c965221ca762ab573e5eae75eb.tar.gz
podman-aa9799b81f4d24c965221ca762ab573e5eae75eb.tar.bz2
podman-aa9799b81f4d24c965221ca762ab573e5eae75eb.zip
container, cgroup: detect pid termination
If the /proc/$PID/cgroup file doesn't exist, then it is likely the container was terminated in the meanwhile so report ErrCtrStopped that is already handled instead of ENOENT. commit a66f40b4df039e94572fa38c070207a435cfa466 introduced the regression. Closes: https://github.com/containers/podman/issues/12457 [NO NEW TESTS NEEDED] it solves a race in the CI that is difficult to reproduce. Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
-rw-r--r--libpod/container.go5
1 files changed, 5 insertions, 0 deletions
diff --git a/libpod/container.go b/libpod/container.go
index b83420ee7..5ae07f602 100644
--- a/libpod/container.go
+++ b/libpod/container.go
@@ -977,6 +977,11 @@ func (c *Container) cGroupPath() (string, error) {
procPath := fmt.Sprintf("/proc/%d/cgroup", c.state.PID)
lines, err := ioutil.ReadFile(procPath)
if err != nil {
+ // If the file doesn't exist, it means the container could have been terminated
+ // so report it.
+ if os.IsNotExist(err) {
+ return "", errors.Wrapf(define.ErrCtrStopped, "cannot get cgroup path unless container %s is running", c.ID())
+ }
return "", err
}