internal/gensupport: Ensure that any bodies created in `GetBody` are cleaned up

Change-Id: Idb7444509ce6c1df99b43908ef17730cc1c40698
Reviewed-on: https://code-review.googlesource.com/c/google-api-go-client/+/48910
Reviewed-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Tyler Bui-Palsulich <tbp@google.com>
diff --git a/internal/gensupport/media.go b/internal/gensupport/media.go
index 0ef96b3..0288cc3 100644
--- a/internal/gensupport/media.go
+++ b/internal/gensupport/media.go
@@ -290,6 +290,9 @@
 		fb := readerFunc(body)
 		fm := readerFunc(media)
 		combined, ctype := CombineBodyMedia(body, "application/json", media, mi.mType)
+		toCleanup := []io.Closer{
+			combined,
+		}
 		if fb != nil && fm != nil {
 			getBody = func() (io.ReadCloser, error) {
 				rb := ioutil.NopCloser(fb())
@@ -299,10 +302,16 @@
 					mimeBoundary = params["boundary"]
 				}
 				r, _ := combineBodyMedia(rb, "application/json", rm, mi.mType, mimeBoundary)
+				toCleanup = append(toCleanup, r)
 				return r, nil
 			}
 		}
-		cleanup = func() { combined.Close() }
+		cleanup = func() {
+			for _, closer := range toCleanup {
+				_ = closer.Close()
+			}
+
+		}
 		reqHeaders.Set("Content-Type", ctype)
 		body = combined
 	}