|  | @@ -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
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 |