From facab2aec561c6d06ae2789dfaffa28b7f273c88 Mon Sep 17 00:00:00 2001 From: Daniel J Walsh Date: Wed, 12 Sep 2018 16:56:10 -0400 Subject: Vendor in latest containers/storage to eliminage deadlock When running lots of podman commands simultaneously we were able to get into a deadlock situation. The updated containers/storage should fix this issue. Signed-off-by: Daniel J Walsh Closes: #1454 Approved by: mheon --- vendor/github.com/containers/storage/store.go | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'vendor/github.com') diff --git a/vendor/github.com/containers/storage/store.go b/vendor/github.com/containers/storage/store.go index 33b91a353..e0deb2c30 100644 --- a/vendor/github.com/containers/storage/store.go +++ b/vendor/github.com/containers/storage/store.go @@ -1091,11 +1091,6 @@ func (s *store) CreateContainer(id string, names []string, image, layer, metadat if err != nil { return nil, err } - rlstore.Lock() - defer rlstore.Unlock() - if modified, err := rlstore.Modified(); modified || err != nil { - rlstore.Load() - } if id == "" { id = stringid.GenerateRandomID() } @@ -1108,6 +1103,10 @@ func (s *store) CreateContainer(id string, names []string, image, layer, metadat idMappingsOptions := options.IDMappingOptions if image != "" { var imageHomeStore ROImageStore + lstores, err := s.ROLayerStores() + if err != nil { + return nil, err + } istore, err := s.ImageStore() if err != nil { return nil, err @@ -1116,6 +1115,11 @@ func (s *store) CreateContainer(id string, names []string, image, layer, metadat if err != nil { return nil, err } + rlstore.Lock() + defer rlstore.Unlock() + if modified, err := rlstore.Modified(); modified || err != nil { + rlstore.Load() + } var cimage *Image for _, store := range append([]ROImageStore{istore}, istores...) { store.Lock() @@ -1134,10 +1138,6 @@ func (s *store) CreateContainer(id string, names []string, image, layer, metadat } imageID = cimage.ID - lstores, err := s.ROLayerStores() - if err != nil { - return nil, err - } ilayer, err := s.imageTopLayerForMapping(cimage, imageHomeStore, imageHomeStore == istore, rlstore, lstores, idMappingsOptions) if err != nil { return nil, err @@ -1150,6 +1150,11 @@ func (s *store) CreateContainer(id string, names []string, image, layer, metadat gidMap = ilayer.GIDMap } } else { + rlstore.Lock() + defer rlstore.Unlock() + if modified, err := rlstore.Modified(); modified || err != nil { + rlstore.Load() + } if !options.HostUIDMapping && len(options.UIDMap) == 0 { uidMap = s.uidMap } -- cgit v1.2.3-54-g00ecf