builder-next: update mount signature
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
(cherry picked from commit d495eeb365886e6d729dc8d17c3028be86f98f11)
Signed-off-by: Tibor Vass <tibor@docker.com>
diff --git a/builder/builder-next/adapters/snapshot/snapshot.go b/builder/builder-next/adapters/snapshot/snapshot.go
index 1e5402d..2bd4276 100644
--- a/builder/builder-next/adapters/snapshot/snapshot.go
+++ b/builder/builder-next/adapters/snapshot/snapshot.go
@@ -255,24 +255,23 @@
var rwlayer layer.RWLayer
return &mountable{
idmap: s.opt.IdentityMapping,
- acquire: func() ([]mount.Mount, error) {
+ acquire: func() ([]mount.Mount, func() error, error) {
rwlayer, err = s.opt.LayerStore.CreateRWLayer(id, l.ChainID(), nil)
if err != nil {
- return nil, err
+ return nil, nil, err
}
rootfs, err := rwlayer.Mount("")
if err != nil {
- return nil, err
+ return nil, nil, err
}
return []mount.Mount{{
- Source: rootfs.Path(),
- Type: "bind",
- Options: []string{"rbind"},
- }}, nil
- },
- release: func() error {
- _, err := s.opt.LayerStore.ReleaseRWLayer(rwlayer)
- return err
+ Source: rootfs.Path(),
+ Type: "bind",
+ Options: []string{"rbind"},
+ }}, func() error {
+ _, err := s.opt.LayerStore.ReleaseRWLayer(rwlayer)
+ return err
+ }, nil
},
}, nil
}
@@ -281,19 +280,18 @@
return &mountable{
idmap: s.opt.IdentityMapping,
- acquire: func() ([]mount.Mount, error) {
+ acquire: func() ([]mount.Mount, func() error, error) {
rootfs, err := s.opt.GraphDriver.Get(id, "")
if err != nil {
- return nil, err
+ return nil, nil, err
}
return []mount.Mount{{
- Source: rootfs.Path(),
- Type: "bind",
- Options: []string{"rbind"},
- }}, nil
- },
- release: func() error {
- return s.opt.GraphDriver.Put(id)
+ Source: rootfs.Path(),
+ Type: "bind",
+ Options: []string{"rbind"},
+ }}, func() error {
+ return s.opt.GraphDriver.Put(id)
+ }, nil
},
}, nil
}
@@ -440,32 +438,33 @@
type mountable struct {
mu sync.Mutex
mounts []mount.Mount
- acquire func() ([]mount.Mount, error)
+ acquire func() ([]mount.Mount, func() error, error)
release func() error
refCount int
idmap *idtools.IdentityMapping
}
-func (m *mountable) Mount() ([]mount.Mount, error) {
+func (m *mountable) Mount() ([]mount.Mount, func() error, error) {
m.mu.Lock()
defer m.mu.Unlock()
if m.mounts != nil {
m.refCount++
- return m.mounts, nil
+ return m.mounts, m.releaseMount, nil
}
- mounts, err := m.acquire()
+ mounts, release, err := m.acquire()
if err != nil {
- return nil, err
+ return nil, nil, err
}
m.mounts = mounts
+ m.release = release
m.refCount = 1
- return m.mounts, nil
+ return m.mounts, m.releaseMount, nil
}
-func (m *mountable) Release() error {
+func (m *mountable) releaseMount() error {
m.mu.Lock()
defer m.mu.Unlock()