From c680a8e1622ed0f18751d9d167c836ee24f5e897 Mon Sep 17 00:00:00 2001 From: Radek Simko Date: Thu, 10 Aug 2017 14:38:14 +0200 Subject: vendor: github.com/hashicorp/terraform/...@v0.10.0 --- .../hashicorp/terraform/helper/shadow/closer.go | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'vendor/github.com/hashicorp/terraform/helper/shadow/closer.go') diff --git a/vendor/github.com/hashicorp/terraform/helper/shadow/closer.go b/vendor/github.com/hashicorp/terraform/helper/shadow/closer.go index 7edd5e7..edc1e2a 100644 --- a/vendor/github.com/hashicorp/terraform/helper/shadow/closer.go +++ b/vendor/github.com/hashicorp/terraform/helper/shadow/closer.go @@ -39,6 +39,8 @@ func (w *closeWalker) Struct(reflect.Value) error { return nil } +var closerType = reflect.TypeOf((*io.Closer)(nil)).Elem() + func (w *closeWalker) StructField(f reflect.StructField, v reflect.Value) error { // Not sure why this would be but lets avoid some panics if !v.IsValid() { @@ -56,17 +58,18 @@ func (w *closeWalker) StructField(f reflect.StructField, v reflect.Value) error return nil } - // We're looking for an io.Closer - raw := v.Interface() - if raw == nil { - return nil + var closer io.Closer + if v.Type().Implements(closerType) { + closer = v.Interface().(io.Closer) + } else if v.CanAddr() { + // The Close method may require a pointer receiver, but we only have a value. + v := v.Addr() + if v.Type().Implements(closerType) { + closer = v.Interface().(io.Closer) + } } - closer, ok := raw.(io.Closer) - if !ok && v.CanAddr() { - closer, ok = v.Addr().Interface().(io.Closer) - } - if !ok { + if closer == nil { return reflectwalk.SkipEntry } -- cgit v1.2.3