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:
		| @@ -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) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Derek McGowan
					Derek McGowan