diff --git a/cmd/object-api-common.go b/cmd/object-api-common.go index b07f60e2c..1830482d4 100644 --- a/cmd/object-api-common.go +++ b/cmd/object-api-common.go @@ -320,6 +320,8 @@ func listObjectsNonSlash(ctx context.Context, bucket, prefix, marker, delimiter // then Walk() stops the walker. func fsWalk(ctx context.Context, obj ObjectLayer, bucket, prefix string, listDir ListDirFunc, results chan<- ObjectInfo, getObjInfo func(context.Context, string, string) (ObjectInfo, error), getObjectInfoDirs ...func(context.Context, string, string) (ObjectInfo, error)) error { if err := checkListObjsArgs(ctx, bucket, prefix, "", obj); err != nil { + // Upon error close the channel. + close(results) return err } diff --git a/cmd/xl-sets.go b/cmd/xl-sets.go index b85ad0bcd..6808ab353 100644 --- a/cmd/xl-sets.go +++ b/cmd/xl-sets.go @@ -1617,6 +1617,8 @@ func (s *xlSets) ListBucketsHeal(ctx context.Context) ([]BucketInfo, error) { // then Walk() stops the walker. func (s *xlSets) Walk(ctx context.Context, bucket, prefix string, results chan<- ObjectInfo) error { if err := checkListObjsArgs(ctx, bucket, prefix, "", s); err != nil { + // Upon error close the channel. + close(results) return err } diff --git a/cmd/xl-zones.go b/cmd/xl-zones.go index d46520cec..6ef02688a 100644 --- a/cmd/xl-zones.go +++ b/cmd/xl-zones.go @@ -1291,6 +1291,8 @@ func (z *xlZones) HealBucket(ctx context.Context, bucket string, dryRun, remove // then Walk() stops the walker. func (z *xlZones) Walk(ctx context.Context, bucket, prefix string, results chan<- ObjectInfo) error { if err := checkListObjsArgs(ctx, bucket, prefix, "", z); err != nil { + // Upon error close the channel. + close(results) return err }