Jelajahi Sumber

early release buffers for better reusing

Darien Raymond 7 tahun lalu
induk
melakukan
caa52e9327

+ 1 - 2
proxy/shadowsocks/server.go

@@ -117,9 +117,8 @@ func (s *Server) handlerUDPPayload(ctx context.Context, conn internet.Connection
 
 			ctx = protocol.ContextWithUser(ctx, request.User)
 			udpServer.Dispatch(ctx, dest, data, func(payload *buf.Buffer) {
-				defer payload.Release()
-
 				data, err := EncodeUDPPacket(request, payload.Bytes())
+				payload.Release()
 				if err != nil {
 					newError("failed to encode UDP packet").Base(err).AtWarning().WithContext(ctx).WriteToLog()
 					return

+ 2 - 2
proxy/socks/server.go

@@ -209,11 +209,11 @@ func (s *Server) handleUDPPayload(ctx context.Context, conn internet.Connection,
 			}
 
 			udpServer.Dispatch(ctx, request.Destination(), payload, func(payload *buf.Buffer) {
-				defer payload.Release()
-
 				newError("writing back UDP response with ", payload.Len(), " bytes").AtDebug().WithContext(ctx).WriteToLog()
 
 				udpMessage, err := EncodeUDPPacket(request, payload.Bytes())
+				payload.Release()
+
 				defer udpMessage.Release()
 				if err != nil {
 					newError("failed to write UDP response").AtWarning().Base(err).WithContext(ctx).WriteToLog()

+ 2 - 2
transport/internet/kcp/listener.go

@@ -73,9 +73,9 @@ func NewListener(ctx context.Context, address net.Address, port net.Port, addCon
 }
 
 func (l *Listener) OnReceive(payload *buf.Buffer, src net.Destination, originalDest net.Destination) {
-	defer payload.Release()
-
 	segments := l.reader.Read(payload.Bytes())
+	payload.Release()
+
 	if len(segments) == 0 {
 		newError("discarding invalid payload from ", src).WriteToLog()
 		return