From bedf8ee2a68a3d34e2f64d53a5ab9d1ea843ba87 Mon Sep 17 00:00:00 2001 From: Anders Daljord Morken Date: Thu, 10 Sep 2015 22:32:40 +0200 Subject: [PATCH] Close HTTP connections on HTTP errors too. Move defer resp.Body.Close() up to make sure it's called even when the HTTP request returns something other than 200 or Decoder construction fails. This avoids leaking and eventually running out of file descriptors. --- retrieval/target.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/retrieval/target.go b/retrieval/target.go index b9d9abe2e2..c37ce2f664 100644 --- a/retrieval/target.go +++ b/retrieval/target.go @@ -437,6 +437,8 @@ func (t *Target) scrape(appender storage.SampleAppender) (err error) { if err != nil { return err } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { return fmt.Errorf("server returned HTTP status %s", resp.Status) } @@ -445,7 +447,6 @@ func (t *Target) scrape(appender storage.SampleAppender) (err error) { if err != nil { return err } - defer resp.Body.Close() sdec := expfmt.SampleDecoder{ Dec: dec,