From aa9799b81f4d24c965221ca762ab573e5eae75eb Mon Sep 17 00:00:00 2001 From: Giuseppe Scrivano Date: Wed, 1 Dec 2021 13:41:02 +0100 Subject: [PATCH] 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 --- libpod/container.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libpod/container.go b/libpod/container.go index b83420ee77..5ae07f602d 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 }