Skip to content

Commit 4b1c887

Browse files
authored
Merge pull request #295 from buildpacks/jab/protect-against-race
Protect map from concurrent writes/reads
2 parents 5772688 + 03e437a commit 4b1c887

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

local/store.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

673676
func (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

Comments
 (0)