@@ -255,24 +255,23 @@ func (s *snapshotter) Mounts(ctx context.Context, key string) (snapshot.Mountabl
255255 var rwlayer layer.RWLayer
256256 return & mountable {
257257 idmap : s .opt .IdentityMapping ,
258- acquire : func () ([]mount.Mount , error ) {
258+ acquire : func () ([]mount.Mount , func () error , error ) {
259259 rwlayer , err = s .opt .LayerStore .CreateRWLayer (id , l .ChainID (), nil )
260260 if err != nil {
261- return nil , err
261+ return nil , nil , err
262262 }
263263 rootfs , err := rwlayer .Mount ("" )
264264 if err != nil {
265- return nil , err
265+ return nil , nil , err
266266 }
267267 return []mount.Mount {{
268- Source : rootfs .Path (),
269- Type : "bind" ,
270- Options : []string {"rbind" },
271- }}, nil
272- },
273- release : func () error {
274- _ , err := s .opt .LayerStore .ReleaseRWLayer (rwlayer )
275- return err
268+ Source : rootfs .Path (),
269+ Type : "bind" ,
270+ Options : []string {"rbind" },
271+ }}, func () error {
272+ _ , err := s .opt .LayerStore .ReleaseRWLayer (rwlayer )
273+ return err
274+ }, nil
276275 },
277276 }, nil
278277 }
@@ -281,19 +280,18 @@ func (s *snapshotter) Mounts(ctx context.Context, key string) (snapshot.Mountabl
281280
282281 return & mountable {
283282 idmap : s .opt .IdentityMapping ,
284- acquire : func () ([]mount.Mount , error ) {
283+ acquire : func () ([]mount.Mount , func () error , error ) {
285284 rootfs , err := s .opt .GraphDriver .Get (id , "" )
286285 if err != nil {
287- return nil , err
286+ return nil , nil , err
288287 }
289288 return []mount.Mount {{
290- Source : rootfs .Path (),
291- Type : "bind" ,
292- Options : []string {"rbind" },
293- }}, nil
294- },
295- release : func () error {
296- return s .opt .GraphDriver .Put (id )
289+ Source : rootfs .Path (),
290+ Type : "bind" ,
291+ Options : []string {"rbind" },
292+ }}, func () error {
293+ return s .opt .GraphDriver .Put (id )
294+ }, nil
297295 },
298296 }, nil
299297}
@@ -440,32 +438,33 @@ func (s *snapshotter) Close() error {
440438type mountable struct {
441439 mu sync.Mutex
442440 mounts []mount.Mount
443- acquire func () ([]mount.Mount , error )
441+ acquire func () ([]mount.Mount , func () error , error )
444442 release func () error
445443 refCount int
446444 idmap * idtools.IdentityMapping
447445}
448446
449- func (m * mountable ) Mount () ([]mount.Mount , error ) {
447+ func (m * mountable ) Mount () ([]mount.Mount , func () error , error ) {
450448 m .mu .Lock ()
451449 defer m .mu .Unlock ()
452450
453451 if m .mounts != nil {
454452 m .refCount ++
455- return m .mounts , nil
453+ return m .mounts , m . releaseMount , nil
456454 }
457455
458- mounts , err := m .acquire ()
456+ mounts , release , err := m .acquire ()
459457 if err != nil {
460- return nil , err
458+ return nil , nil , err
461459 }
462460 m .mounts = mounts
461+ m .release = release
463462 m .refCount = 1
464463
465- return m .mounts , nil
464+ return m .mounts , m . releaseMount , nil
466465}
467466
468- func (m * mountable ) Release () error {
467+ func (m * mountable ) releaseMount () error {
469468 m .mu .Lock ()
470469 defer m .mu .Unlock ()
471470
0 commit comments