From ece39c946294d36825899fdbc5390957c42a5fed Mon Sep 17 00:00:00 2001 From: Yicheng Qin Date: Mon, 24 Aug 2015 10:51:17 -0700 Subject: [PATCH] proxy: always cancel in-flight request This fits the way for go1.5 to cancel request. --- proxy/reverse.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/proxy/reverse.go b/proxy/reverse.go index 00f194ba5..2ecbf1fc3 100644 --- a/proxy/reverse.go +++ b/proxy/reverse.go @@ -26,8 +26,10 @@ import ( "strings" "sync/atomic" - "github.com/coreos/etcd/etcdserver/etcdhttp/httptypes" "time" + + "github.com/coreos/etcd/etcdserver/etcdhttp/httptypes" + "github.com/coreos/etcd/pkg/httputil" ) // Hop-by-hop headers. These are removed when sent to the backend. @@ -98,17 +100,14 @@ func (p *reverseProxy) ServeHTTP(rw http.ResponseWriter, clientreq *http.Request var requestClosed int32 completeCh := make(chan bool, 1) closeNotifier, ok := rw.(http.CloseNotifier) + cancel := httputil.RequestCanceler(p.transport, proxyreq) if ok { go func() { select { case <-closeNotifier.CloseNotify(): atomic.StoreInt32(&requestClosed, 1) log.Printf("proxy: client %v closed request prematurely", clientreq.RemoteAddr) - - tp, ok := p.transport.(*http.Transport) - if ok { - tp.CancelRequest(proxyreq) - } + cancel() case <-completeCh: } }()