Fix deadlock in overlay snapshotter
The Usage implementation in the overlay driver allowed returning before Rollback was called, leaving a transaction open and causing further operations to deadlock. This could occur if the usage call to the datastore returned an error, such as not found. Signed-off-by: Derek McGowan <derek@mcgstyle.net>
This commit is contained in:
parent
59d1c16666
commit
ad9eca1dc4
@ -124,12 +124,13 @@ func (o *snapshotter) Usage(ctx context.Context, key string) (snapshot.Usage, er
|
||||
return snapshot.Usage{}, err
|
||||
}
|
||||
id, info, usage, err := storage.GetInfo(ctx, key)
|
||||
t.Rollback() // transaction no longer needed at this point.
|
||||
|
||||
if err != nil {
|
||||
return snapshot.Usage{}, err
|
||||
}
|
||||
|
||||
upperPath := o.upperPath(id)
|
||||
t.Rollback() // transaction no longer needed at this point.
|
||||
|
||||
if info.Kind == snapshot.KindActive {
|
||||
du, err := fs.DiskUsage(upperPath)
|
||||
|
Loading…
Reference in New Issue
Block a user