Przeglądaj źródła

rework multibuf copy

Darien Raymond 7 lat temu
rodzic
commit
a3fd81dfff
1 zmienionych plików z 7 dodań i 5 usunięć
  1. 7 5
      transport/internet/kcp/connection.go

+ 7 - 5
transport/internet/kcp/connection.go

@@ -392,7 +392,11 @@ func (c *Connection) WriteMultiBuffer(mb buf.MultiBuffer) error {
 		}
 	}()
 
-	mbPtr := &mb
+	f := func(x *buf.MultiBuffer) buf.Supplier {
+		return func(bb []byte) (int, error) {
+			return x.Read(bb[:c.mss])
+		}
+	}(&mb)
 
 	for {
 		for {
@@ -400,13 +404,11 @@ func (c *Connection) WriteMultiBuffer(mb buf.MultiBuffer) error {
 				return io.ErrClosedPipe
 			}
 
-			if !c.sendingWorker.Push(func(bb []byte) (int, error) {
-				return mbPtr.Read(bb[:c.mss])
-			}) {
+			if !c.sendingWorker.Push(f) {
 				break
 			}
 			updatePending = true
-			if mbPtr.IsEmpty() {
+			if mb.IsEmpty() {
 				return nil
 			}
 		}