@@ -35,6 +35,7 @@ type Store struct {
3535 // optional
3636 downloadOnce * sync.Once
3737 onDiskLayersByDiffID map [v1.Hash ]annotatedLayer
38+ onDiskLayersMutex sync.RWMutex
3839
3940 // containerd storage detection cache
4041 containerdStorageCache * bool
@@ -386,7 +387,9 @@ func (s *Store) getLayerSize(layer v1.Layer) (int64, error) {
386387 return 0 , err
387388 }
388389
390+ s .onDiskLayersMutex .RLock ()
389391 knownLayer , layerFound := s .onDiskLayersByDiffID [diffID ]
392+ s .onDiskLayersMutex .RUnlock ()
390393 if layerFound && knownLayer .uncompressedSize != - 1 {
391394 return knownLayer .uncompressedSize , nil
392395 }
@@ -671,7 +674,9 @@ func (s *Store) LayerByDiffID(h v1.Hash) (v1.Layer, error) {
671674}
672675
673676func (s * Store ) findLayer (withHash v1.Hash ) v1.Layer {
677+ s .onDiskLayersMutex .RLock ()
674678 aLayer , layerFound := s .onDiskLayersByDiffID [withHash ]
679+ s .onDiskLayersMutex .RUnlock ()
675680 if ! layerFound {
676681 return nil
677682 }
@@ -741,10 +746,12 @@ func (s *Store) AddLayer(fromPath string) (v1.Layer, error) {
741746 uncompressedSize = fileSize
742747 }
743748
749+ s .onDiskLayersMutex .Lock ()
744750 s .onDiskLayersByDiffID [diffID ] = annotatedLayer {
745751 layer : layer ,
746752 uncompressedSize : uncompressedSize ,
747753 }
754+ s .onDiskLayersMutex .Unlock ()
748755
749756 return layer , nil
750757}
0 commit comments