THRIFT-3277 THttpClient leaks connections if it's used for multiple requests
Client: Go
Patch: Prashant Varanasi <prashant@uber.com>

This closes #571
diff --git a/lib/go/thrift/http_client.go b/lib/go/thrift/http_client.go
index 0f6e704..bf0ed62 100644
--- a/lib/go/thrift/http_client.go
+++ b/lib/go/thrift/http_client.go
@@ -129,17 +129,22 @@
 	return p.response != nil || p.requestBuffer != nil
 }
 
-func (p *THttpClient) Close() error {
+func (p *THttpClient) closeResponse() error {
+	var err error
 	if p.response != nil && p.response.Body != nil {
-		err := p.response.Body.Close()
-		p.response = nil
-		return err
+		err = p.response.Body.Close()
 	}
+
+	p.response = nil
+	return err
+}
+
+func (p *THttpClient) Close() error {
 	if p.requestBuffer != nil {
 		p.requestBuffer.Reset()
 		p.requestBuffer = nil
 	}
-	return nil
+	return p.closeResponse()
 }
 
 func (p *THttpClient) Read(buf []byte) (int, error) {
@@ -171,6 +176,9 @@
 }
 
 func (p *THttpClient) Flush() error {
+	// Close any previous response body to avoid leaking connections.
+	p.closeResponse()
+
 	client := &http.Client{}
 	req, err := http.NewRequest("POST", p.url.String(), p.requestBuffer)
 	if err != nil {