mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
layer: protect mountedLayer.references
Add a mutex to protect concurrent access to mountedLayer.references map. Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
This commit is contained in:
parent
619df5a8f6
commit
f73b5cb4e8
1 changed files with 13 additions and 1 deletions
|
@ -2,6 +2,7 @@ package layer // import "github.com/docker/docker/layer"
|
|||
|
||||
import (
|
||||
"io"
|
||||
"sync"
|
||||
|
||||
"github.com/docker/docker/pkg/archive"
|
||||
"github.com/docker/docker/pkg/containerfs"
|
||||
|
@ -15,6 +16,7 @@ type mountedLayer struct {
|
|||
path string
|
||||
layerStore *layerStore
|
||||
|
||||
sync.Mutex
|
||||
references map[RWLayer]*referencedRWLayer
|
||||
}
|
||||
|
||||
|
@ -62,16 +64,24 @@ func (ml *mountedLayer) getReference() RWLayer {
|
|||
ref := &referencedRWLayer{
|
||||
mountedLayer: ml,
|
||||
}
|
||||
ml.Lock()
|
||||
ml.references[ref] = ref
|
||||
ml.Unlock()
|
||||
|
||||
return ref
|
||||
}
|
||||
|
||||
func (ml *mountedLayer) hasReferences() bool {
|
||||
return len(ml.references) > 0
|
||||
ml.Lock()
|
||||
ret := len(ml.references) > 0
|
||||
ml.Unlock()
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func (ml *mountedLayer) deleteReference(ref RWLayer) error {
|
||||
ml.Lock()
|
||||
defer ml.Unlock()
|
||||
if _, ok := ml.references[ref]; !ok {
|
||||
return ErrLayerNotRetained
|
||||
}
|
||||
|
@ -81,7 +91,9 @@ func (ml *mountedLayer) deleteReference(ref RWLayer) error {
|
|||
|
||||
func (ml *mountedLayer) retakeReference(r RWLayer) {
|
||||
if ref, ok := r.(*referencedRWLayer); ok {
|
||||
ml.Lock()
|
||||
ml.references[ref] = ref
|
||||
ml.Unlock()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue