From a68efe7d1ee94573d8582b6649fc34783758051b Mon Sep 17 00:00:00 2001 From: "Shota Fukumori (sora_h)" Date: Wed, 29 Apr 2015 05:59:02 +0900 Subject: [PATCH] proxy: Fix connection leak when client disconnect established connections were leaked when client disconnected before proxyreq completes. This happens all time for wait=true requests. --- proxy/reverse.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/proxy/reverse.go b/proxy/reverse.go index ff3d683e8..ee0b9cbcd 100644 --- a/proxy/reverse.go +++ b/proxy/reverse.go @@ -73,6 +73,25 @@ func (p *reverseProxy) ServeHTTP(rw http.ResponseWriter, clientreq *http.Request return } + completeCh := make(chan bool, 1) + closeNotifier, ok := rw.(http.CloseNotifier) + if ok { + go func() { + select { + case <-closeNotifier.CloseNotify(): + tp, ok := p.transport.(*http.Transport) + if ok { + tp.CancelRequest(proxyreq) + } + case <-completeCh: + } + }() + + defer func() { + completeCh <- true + }() + } + var res *http.Response var err error