Bladeren bron

safe release buffer

Darien Raymond 8 jaren geleden
bovenliggende
commit
c1eccb3a45
1 gewijzigde bestanden met toevoegingen van 10 en 12 verwijderingen
  1. 10 12
      app/proxyman/mux/writer.go

+ 10 - 12
app/proxyman/mux/writer.go

@@ -82,23 +82,21 @@ func (w *Writer) writeData(mb buf.MultiBuffer) error {
 
 // Write implements buf.MultiBufferWriter.
 func (w *Writer) Write(mb buf.MultiBuffer) error {
+	defer mb.Release()
+
 	if mb.IsEmpty() {
 		return w.writeMetaOnly()
 	}
 
-	if w.transferType == protocol.TransferTypeStream {
-		const chunkSize = 8 * 1024
-		for !mb.IsEmpty() {
-			slice := mb.SliceBySize(chunkSize)
-			if err := w.writeData(slice); err != nil {
-				return err
-			}
+	for !mb.IsEmpty() {
+		var chunk buf.MultiBuffer
+		if w.transferType == protocol.TransferTypeStream {
+			chunk = mb.SliceBySize(8 * 1024)
+		} else {
+			chunk = buf.NewMultiBufferValue(mb.SplitFirst())
 		}
-	} else {
-		for _, b := range mb {
-			if err := w.writeData(buf.NewMultiBufferValue(b)); err != nil {
-				return err
-			}
+		if err := w.writeData(chunk); err != nil {
+			return err
 		}
 	}