make sure writer not buffered

pull/714/merge
Darien Raymond 2017-11-15 11:23:25 +01:00
parent 5a6022d1ed
commit f3c5df8798
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
2 changed files with 5 additions and 8 deletions

View File

@ -121,6 +121,7 @@ func (w *BufferedWriter) SetBuffered(f bool) error {
return nil return nil
} }
// ReadFrom implements io.ReaderFrom.
func (w *BufferedWriter) ReadFrom(reader io.Reader) (int64, error) { func (w *BufferedWriter) ReadFrom(reader io.Reader) (int64, error) {
var sc SizeCounter var sc SizeCounter
if !w.buffer.IsEmpty() { if !w.buffer.IsEmpty() {
@ -130,11 +131,12 @@ func (w *BufferedWriter) ReadFrom(reader io.Reader) (int64, error) {
} }
} }
w.buffered = false
if readerFrom, ok := w.writer.(io.ReaderFrom); ok { if readerFrom, ok := w.writer.(io.ReaderFrom); ok {
return readerFrom.ReadFrom(reader) return readerFrom.ReadFrom(reader)
} }
w.buffered = false
err := Copy(NewReader(reader), w, CountSize(&sc)) err := Copy(NewReader(reader), w, CountSize(&sc))
return sc.Size, err return sc.Size, err
} }

View File

@ -257,13 +257,8 @@ func (s *Server) handlePlainHTTP(ctx context.Context, request *http.Request, rea
request.Header.Set("Connection", "close") request.Header.Set("Connection", "close")
requestWriter := buf.NewBufferedWriter(ray.InboundInput()) requestWriter := buf.NewBufferedWriter(ray.InboundInput())
if err := request.Write(requestWriter); err != nil { common.Must(requestWriter.SetBuffered(false))
return err return request.Write(requestWriter)
}
if err := requestWriter.Flush(); err != nil {
return err
}
return nil
}) })
responseDone := signal.ExecuteAsync(func() error { responseDone := signal.ExecuteAsync(func() error {