From f664cd7ea51106c8c7275c81ccea0e562191b93d Mon Sep 17 00:00:00 2001 From: Fabian Reinartz Date: Fri, 2 Oct 2015 12:00:58 +0200 Subject: [PATCH] Use ctxhttp package for cancelable requests --- api/prometheus/api.go | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/api/prometheus/api.go b/api/prometheus/api.go index ea98d43..0e468f4 100644 --- a/api/prometheus/api.go +++ b/api/prometheus/api.go @@ -29,6 +29,7 @@ import ( "github.com/prometheus/common/model" "golang.org/x/net/context" + "golang.org/x/net/context/ctxhttp" ) const ( @@ -134,29 +135,7 @@ func (c *httpClient) url(ep string, args map[string]string) *url.URL { } func (c *httpClient) do(ctx context.Context, req *http.Request) (*http.Response, []byte, error) { - type roundTripResponse struct { - resp *http.Response - err error - } - - rtchan := make(chan roundTripResponse, 1) - go func() { - resp, err := c.transport.RoundTrip(req) - rtchan <- roundTripResponse{resp: resp, err: err} - close(rtchan) - }() - - var resp *http.Response - var err error - - select { - case rtresp := <-rtchan: - resp, err = rtresp.resp, rtresp.err - case <-ctx.Done(): - // Cancel request and wait until it terminated. - c.transport.CancelRequest(req) - resp, err = (<-rtchan).resp, ctx.Err() - } + resp, err := ctxhttp.Do(ctx, &http.Client{Transport: c.transport}, req) defer func() { if resp != nil {