diff --git a/transport/internet/http/dialer.go b/transport/internet/http/dialer.go index 75adc249..010a95a5 100644 --- a/transport/internet/http/dialer.go +++ b/transport/internet/http/dialer.go @@ -204,7 +204,7 @@ type WaitReadCloser struct { func (w *WaitReadCloser) Set(rc io.ReadCloser) { w.ReadCloser = rc defer func() { - if err := recover(); err != nil { + if recover() != nil { rc.Close() } }() @@ -225,10 +225,8 @@ func (w *WaitReadCloser) Close() error { return w.ReadCloser.Close() } defer func() { - if err := recover(); err != nil { - if w.ReadCloser != nil { - w.ReadCloser.Close() - } + if recover() != nil && w.ReadCloser != nil { + w.ReadCloser.Close() } }() close(w.Wait) diff --git a/transport/internet/http/hub.go b/transport/internet/http/hub.go index 54abe298..551f897e 100644 --- a/transport/internet/http/hub.go +++ b/transport/internet/http/hub.go @@ -51,6 +51,13 @@ func (fw flushWriter) Write(p []byte) (n int, err error) { return 0, io.ErrClosedPipe } + defer func() { + if recover() != nil { + fw.d.Close() + err = io.ErrClosedPipe + } + }() + n, err = fw.w.Write(p) if f, ok := fw.w.(http.Flusher); ok && err == nil { f.Flush()