httpproxy: fix race on getting close notifier channel

Fixes #5267
This commit is contained in:
Anthony Romano 2016-05-04 09:32:26 -07:00
parent b7761530e1
commit a76f5f5ed2

View File

@ -112,9 +112,10 @@ func (p *reverseProxy) ServeHTTP(rw http.ResponseWriter, clientreq *http.Request
closeNotifier, ok := rw.(http.CloseNotifier) closeNotifier, ok := rw.(http.CloseNotifier)
cancel := httputil.RequestCanceler(p.transport, proxyreq) cancel := httputil.RequestCanceler(p.transport, proxyreq)
if ok { if ok {
closeCh := closeNotifier.CloseNotify()
go func() { go func() {
select { select {
case <-closeNotifier.CloseNotify(): case <-closeCh:
atomic.StoreInt32(&requestClosed, 1) atomic.StoreInt32(&requestClosed, 1)
log.Printf("proxy: client %v closed request prematurely", clientreq.RemoteAddr) log.Printf("proxy: client %v closed request prematurely", clientreq.RemoteAddr)
cancel() cancel()