From 9fb65a91af5ce5f0a17931530112c023dbdfd406 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 b9d9abe2e..c37ce2f66 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,