diff options
author | Valentin Rothberg <rothberg@redhat.com> | 2021-01-07 13:13:36 +0100 |
---|---|---|
committer | Valentin Rothberg <rothberg@redhat.com> | 2021-01-14 17:45:30 +0100 |
commit | d54478d8eaec9481d482942b87065af36995d39a (patch) | |
tree | 6c18acf17797a234b3c3f5e95f6e50b71a5d5b1b /libpod/rootless_cni_linux.go | |
parent | d2503ae99b773db7b9dbdf3abf3be0160ac78399 (diff) | |
download | podman-d54478d8eaec9481d482942b87065af36995d39a.tar.gz podman-d54478d8eaec9481d482942b87065af36995d39a.tar.bz2 podman-d54478d8eaec9481d482942b87065af36995d39a.zip |
container stop: release lock before calling the runtime
Podman defers stopping the container to the runtime, which can take some
time. Keeping the lock while waiting for the runtime to complete the
stop procedure, prevents other commands from acquiring the lock as shown
in #8501.
To improve the user experience, release the lock before invoking the
runtime, and re-acquire the lock when the runtime is finished. Also
introduce an intermediate "stopping" to properly distinguish from
"stopped" containers etc.
Fixes: #8501
Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
Diffstat (limited to 'libpod/rootless_cni_linux.go')
-rw-r--r-- | libpod/rootless_cni_linux.go | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/libpod/rootless_cni_linux.go b/libpod/rootless_cni_linux.go index ce8a87759..9a980750f 100644 --- a/libpod/rootless_cni_linux.go +++ b/libpod/rootless_cni_linux.go @@ -110,6 +110,8 @@ func DeallocRootlessCNI(ctx context.Context, c *Container) error { logrus.Warn(err) } logrus.Debugf("rootless CNI: removing infra container %q", infra.ID()) + infra.lock.Lock() + defer infra.lock.Unlock() if err := c.runtime.removeContainer(ctx, infra, true, false, true); err != nil { return err } |