diff --git a/proxy/freedom/freedom.go b/proxy/freedom/freedom.go index bcd6cad47..d29d8721b 100644 --- a/proxy/freedom/freedom.go +++ b/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 diff --git a/proxy/vmess/outbound/outbound.go b/proxy/vmess/outbound/outbound.go index 5343271ef..fc94cfd63 100644 --- a/proxy/vmess/outbound/outbound.go +++ b/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 }