Ver Fonte

clean up on error

v2ray há 9 anos atrás
pai
commit
8d1f06ebaf
2 ficheiros alterados com 4 adições e 6 exclusões
  1. 1 1
      proxy/freedom/freedom.go
  2. 3 5
      proxy/vmess/outbound/outbound.go

+ 1 - 1
proxy/freedom/freedom.go

@@ -22,6 +22,7 @@ func (this *FreedomConnection) Dispatch(destination v2net.Destination, payload *
 
 	defer payload.Release()
 	defer ray.OutboundInput().Release()
+	defer ray.OutboundOutput().Close()
 
 	var conn net.Conn
 	err := retry.Timed(5, 100).On(func() error {
@@ -56,7 +57,6 @@ func (this *FreedomConnection) Dispatch(destination v2net.Destination, payload *
 
 	go func() {
 		defer readMutex.Unlock()
-		defer output.Close()
 
 		var reader io.Reader = conn
 

+ 3 - 5
proxy/vmess/outbound/outbound.go

@@ -23,6 +23,9 @@ type VMessOutboundHandler struct {
 }
 
 func (this *VMessOutboundHandler) Dispatch(target v2net.Destination, payload *alloc.Buffer, ray ray.OutboundRay) error {
+	defer ray.OutboundInput().Release()
+	defer ray.OutboundOutput().Close()
+
 	destination, vNextUser := this.receiverManager.PickReceiver()
 
 	command := proto.RequestCommandTCP
@@ -41,9 +44,6 @@ func (this *VMessOutboundHandler) Dispatch(target v2net.Destination, payload *al
 	conn, err := dialer.Dial(destination)
 	if err != nil {
 		log.Error("Failed to open ", destination, ": ", err)
-		if ray != nil {
-			ray.OutboundOutput().Close()
-		}
 		return err
 	}
 	log.Info("VMessOut: Tunneling request to ", request.Address, " via ", destination)
@@ -64,8 +64,6 @@ func (this *VMessOutboundHandler) Dispatch(target v2net.Destination, payload *al
 
 	requestFinish.Lock()
 	responseFinish.Lock()
-	output.Close()
-	input.Release()
 	return nil
 }