diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2021-10-28 12:16:24 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-28 12:16:24 +0000 |
commit | 3bc449371c97486620fd368deb906c68cdaf220d (patch) | |
tree | f02e5b99fdba93bb81a001ec3ea9fbbfc26ac91c | |
parent | f16b13366424468246a2c78414e2c92142393f6e (diff) | |
parent | 960831f9c8ff83f427c296adcef0ed114c434fca (diff) | |
download | podman-3bc449371c97486620fd368deb906c68cdaf220d.tar.gz podman-3bc449371c97486620fd368deb906c68cdaf220d.tar.bz2 podman-3bc449371c97486620fd368deb906c68cdaf220d.zip |
Merge pull request #12126 from giuseppe/fix-race-warning-message
runtime: change PID existence check
-rw-r--r-- | libpod/runtime.go | 4 | ||||
-rw-r--r-- | utils/utils.go | 16 |
2 files changed, 16 insertions, 4 deletions
diff --git a/libpod/runtime.go b/libpod/runtime.go index 950ac65eb..b01f8dd13 100644 --- a/libpod/runtime.go +++ b/libpod/runtime.go @@ -545,9 +545,7 @@ func makeRuntime(ctx context.Context, runtime *Runtime) (retErr error) { if became { // Check if the pause process was created. If it was created, then // move it to its own systemd scope. - if _, err = os.Stat(pausePid); err == nil { - utils.MovePauseProcessToScope(pausePid) - } + utils.MovePauseProcessToScope(pausePid) os.Exit(ret) } } diff --git a/utils/utils.go b/utils/utils.go index 55af41bb3..109ae088b 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -14,6 +14,7 @@ import ( "github.com/containers/podman/v3/libpod/define" "github.com/containers/podman/v3/pkg/cgroups" "github.com/containers/storage/pkg/archive" + "github.com/godbus/dbus/v5" "github.com/pkg/errors" "github.com/sirupsen/logrus" ) @@ -177,13 +178,26 @@ func RunsOnSystemd() bool { func moveProcessToScope(pidPath, slice, scope string) error { data, err := ioutil.ReadFile(pidPath) if err != nil { + // do not raise an error if the file doesn't exist + if os.IsNotExist(err) { + return nil + } return errors.Wrapf(err, "cannot read pid file %s", pidPath) } pid, err := strconv.ParseUint(string(data), 10, 0) if err != nil { return errors.Wrapf(err, "cannot parse pid file %s", pidPath) } - return RunUnderSystemdScope(int(pid), slice, scope) + err = RunUnderSystemdScope(int(pid), slice, scope) + + // If the PID is not valid anymore, do not return an error. + if dbusErr, ok := err.(dbus.Error); ok { + if dbusErr.Name == "org.freedesktop.DBus.Error.UnixProcessIdUnknown" { + return nil + } + } + + return err } // MovePauseProcessToScope moves the pause process used for rootless mode to keep the namespaces alive to |