aboutsummaryrefslogtreecommitdiff
path: root/libpod
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2020-11-12 16:11:30 +0100
committerGitHub <noreply@github.com>2020-11-12 16:11:30 +0100
commit39e3ec767ae045a5413d1cacb76359cc2e7c44ee (patch)
tree5ce3a330361acdea64f2b67bdde112928e5a6be9 /libpod
parent6c2503ca04d0224a22ae687337436a3ffeb6579d (diff)
parent0f637e09da85b2aaefa279cfb571b004a2cc6d59 (diff)
downloadpodman-39e3ec767ae045a5413d1cacb76359cc2e7c44ee.tar.gz
podman-39e3ec767ae045a5413d1cacb76359cc2e7c44ee.tar.bz2
podman-39e3ec767ae045a5413d1cacb76359cc2e7c44ee.zip
Merge pull request #8307 from mheon/fix_8221
Ensure we do not double-lock the same volume in create
Diffstat (limited to 'libpod')
-rw-r--r--libpod/container_internal.go1
-rw-r--r--libpod/runtime_ctr.go7
2 files changed, 8 insertions, 0 deletions
diff --git a/libpod/container_internal.go b/libpod/container_internal.go
index 0aeaae43d..3a8566760 100644
--- a/libpod/container_internal.go
+++ b/libpod/container_internal.go
@@ -1503,6 +1503,7 @@ func (c *Container) mountStorage() (_ string, deferredErr error) {
// config.
// Returns the volume that was mounted.
func (c *Container) mountNamedVolume(v *ContainerNamedVolume, mountpoint string) (*Volume, error) {
+ logrus.Debugf("Going to mount named volume %s", v.Name)
vol, err := c.runtime.state.Volume(v.Name)
if err != nil {
return nil, errors.Wrapf(err, "error retrieving named volume %s for container %s", v.Name, c.ID())
diff --git a/libpod/runtime_ctr.go b/libpod/runtime_ctr.go
index c84268889..14b537ca2 100644
--- a/libpod/runtime_ctr.go
+++ b/libpod/runtime_ctr.go
@@ -345,8 +345,15 @@ func (r *Runtime) setupContainer(ctx context.Context, ctr *Container) (_ *Contai
// Lock all named volumes we are adding ourself to, to ensure we can't
// use a volume being removed.
+ volsLocked := make(map[string]bool)
for _, namedVol := range ctrNamedVolumes {
toLock := namedVol
+ // Ensure that we don't double-lock a named volume that is used
+ // more than once.
+ if volsLocked[namedVol.Name()] {
+ continue
+ }
+ volsLocked[namedVol.Name()] = true
toLock.lock.Lock()
defer toLock.lock.Unlock()
}