Darien Raymond %!s(int64=7) %!d(string=hai) anos
pai
achega
75a7e9c7f5

+ 1 - 1
app/commander/commander.go

@@ -74,7 +74,7 @@ func (c *Commander) Start() error {
 	}()
 
 	c.ohm.RemoveHandler(context.Background(), c.config.Tag)
-	c.ohm.AddHandler(context.Background(), &CommanderOutbound{
+	c.ohm.AddHandler(context.Background(), &Outbound{
 		tag:      c.config.Tag,
 		listener: listener,
 	})

+ 14 - 11
app/commander/outbound.go

@@ -5,6 +5,7 @@ import (
 	"net"
 	"sync"
 
+	"v2ray.com/core/common"
 	"v2ray.com/core/common/signal"
 	"v2ray.com/core/transport/ray"
 )
@@ -24,6 +25,7 @@ func (l *OutboundListener) add(conn net.Conn) {
 	}
 }
 
+// Accept implements net.Listener.
 func (l *OutboundListener) Accept() (net.Conn, error) {
 	select {
 	case <-l.done.C():
@@ -33,8 +35,9 @@ func (l *OutboundListener) Accept() (net.Conn, error) {
 	}
 }
 
+// Close implement net.Listener.
 func (l *OutboundListener) Close() error {
-	l.done.Close()
+	common.Must(l.done.Close())
 L:
 	for {
 		select {
@@ -47,6 +50,7 @@ L:
 	return nil
 }
 
+// Addr implements net.Listener.
 func (l *OutboundListener) Addr() net.Addr {
 	return &net.TCPAddr{
 		IP:   net.IP{0, 0, 0, 0},
@@ -54,8 +58,8 @@ func (l *OutboundListener) Addr() net.Addr {
 	}
 }
 
-// CommanderOutbound is a core.OutboundHandler that handles gRPC connections.
-type CommanderOutbound struct {
+// Outbound is a core.OutboundHandler that handles gRPC connections.
+type Outbound struct {
 	tag      string
 	listener *OutboundListener
 	access   sync.RWMutex
@@ -63,7 +67,7 @@ type CommanderOutbound struct {
 }
 
 // Dispatch implements core.OutboundHandler.
-func (co *CommanderOutbound) Dispatch(ctx context.Context, r ray.OutboundRay) {
+func (co *Outbound) Dispatch(ctx context.Context, r ray.OutboundRay) {
 	co.access.RLock()
 
 	if co.closed {
@@ -81,12 +85,12 @@ func (co *CommanderOutbound) Dispatch(ctx context.Context, r ray.OutboundRay) {
 }
 
 // Tag implements core.OutboundHandler.
-func (co *CommanderOutbound) Tag() string {
+func (co *Outbound) Tag() string {
 	return co.tag
 }
 
 // Start implements common.Runnable.
-func (co *CommanderOutbound) Start() error {
+func (co *Outbound) Start() error {
 	co.access.Lock()
 	co.closed = false
 	co.access.Unlock()
@@ -94,11 +98,10 @@ func (co *CommanderOutbound) Start() error {
 }
 
 // Close implements common.Closable.
-func (co *CommanderOutbound) Close() error {
+func (co *Outbound) Close() error {
 	co.access.Lock()
-	co.closed = true
-	co.listener.Close()
-	co.access.Unlock()
+	defer co.access.Unlock()
 
-	return nil
+	co.closed = true
+	return co.listener.Close()
 }

+ 3 - 1
app/proxyman/inbound/inbound.go

@@ -72,7 +72,9 @@ func (m *Manager) RemoveHandler(ctx context.Context, tag string) error {
 	defer m.access.Unlock()
 
 	if handler, found := m.taggedHandlers[tag]; found {
-		handler.Close()
+		if err := handler.Close(); err != nil {
+			newError("failed to close handler ", tag).Base(err).AtWarning().WithContext(ctx).WriteToLog()
+		}
 		delete(m.taggedHandlers, tag)
 		return nil
 	}

+ 5 - 0
app/router/router.go

@@ -11,12 +11,14 @@ import (
 	"v2ray.com/core/proxy"
 )
 
+// Router is an implementation of core.Router.
 type Router struct {
 	domainStrategy Config_DomainStrategy
 	rules          []Rule
 	dns            core.DNSClient
 }
 
+// NewRouter creates a new Router based on the given config.
 func NewRouter(ctx context.Context, config *Config) (*Router, error) {
 	v := core.MustFromContext(ctx)
 	r := &Router{
@@ -68,6 +70,7 @@ func (r *ipResolver) Resolve() []net.Address {
 	return r.ip
 }
 
+// PickRoute implements core.Router.
 func (r *Router) PickRoute(ctx context.Context) (string, error) {
 	resolver := &ipResolver{
 		dns: r.dns,
@@ -106,10 +109,12 @@ func (r *Router) PickRoute(ctx context.Context) (string, error) {
 	return "", core.ErrNoClue
 }
 
+// Start implements common.Runnable.
 func (*Router) Start() error {
 	return nil
 }
 
+// Close implements common.Closable.
 func (*Router) Close() error {
 	return nil
 }