Browse Source

make sure writer not buffered

Darien Raymond 8 years ago
parent
commit
f3c5df8798
2 changed files with 5 additions and 8 deletions
  1. 3 1
      common/buf/writer.go
  2. 2 7
      proxy/http/server.go

+ 3 - 1
common/buf/writer.go

@@ -121,6 +121,7 @@ func (w *BufferedWriter) SetBuffered(f bool) error {
 	return nil
 }
 
+// ReadFrom implements io.ReaderFrom.
 func (w *BufferedWriter) ReadFrom(reader io.Reader) (int64, error) {
 	var sc SizeCounter
 	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 {
 		return readerFrom.ReadFrom(reader)
 	}
 
-	w.buffered = false
 	err := Copy(NewReader(reader), w, CountSize(&sc))
 	return sc.Size, err
 }

+ 2 - 7
proxy/http/server.go

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