From e2111026a62df3069d59d7dd34d5c89d8c24dbd3 Mon Sep 17 00:00:00 2001 From: Xi Xinjie Date: Sun, 17 Nov 2019 23:43:03 +0800 Subject: [PATCH] fix trace context overriding request context --- middleware.go | 12 ++++++------ trace.go | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/middleware.go b/middleware.go index a662db85..54798710 100644 --- a/middleware.go +++ b/middleware.go @@ -195,15 +195,15 @@ func createHTTPRequest(c *Client, r *Request) (err error) { r.RawRequest.URL.Host = r.URL } - // Use context if it was specified - if r.ctx != nil { - r.RawRequest = r.RawRequest.WithContext(r.ctx) - } - // Enable trace if c.trace || r.trace { r.clientTrace = &clientTrace{} - r.RawRequest = r.RawRequest.WithContext(r.clientTrace.createContext()) + r.ctx = r.clientTrace.createContext(r.Context()) + } + + // Use context if it was specified + if r.ctx != nil { + r.RawRequest = r.RawRequest.WithContext(r.ctx) } // assign get body func for the underlying raw request instance diff --git a/trace.go b/trace.go index a3882382..862a3a06 100644 --- a/trace.go +++ b/trace.go @@ -77,9 +77,9 @@ type clientTrace struct { // Trace unexported methods //_______________________________________________________________________ -func (t *clientTrace) createContext() context.Context { +func (t *clientTrace) createContext(ctx context.Context) context.Context { return httptrace.WithClientTrace( - context.Background(), + ctx, &httptrace.ClientTrace{ GetConn: func(_ string) { t.getConn = time.Now()