소스 검색

use detached context to fix #1059 #1059

It is important to use a detached context when creating shared transport connections that will outlive the initializing connection.

Otherwise, once the original initializing connection is cancelled, the transport connection will be cancelled as well.

This issue will be addressed in v5 by providing a transport session storage that also reduce the usage of globalDialerMap and other global variables.
Shelikhoo 4 년 전
부모
커밋
861d6be19a
2개의 변경된 파일6개의 추가작업 그리고 2개의 파일을 삭제
  1. 3 1
      transport/internet/grpc/dial.go
  2. 3 1
      transport/internet/http/dialer.go

+ 3 - 1
transport/internet/grpc/dial.go

@@ -4,6 +4,7 @@ package grpc
 
 import (
 	"context"
+	core "github.com/v2fly/v2ray-core/v4"
 	gonet "net"
 	"sync"
 	"time"
@@ -100,7 +101,8 @@ func getGrpcClient(ctx context.Context, dest net.Destination, dialOption grpc.Di
 				return nil, err
 			}
 			address := net.ParseAddress(rawHost)
-			return internet.DialSystem(ctx, net.TCPDestination(address, port), nil)
+			detachedContext := core.ToBackgroundDetachedContext(ctx)
+			return internet.DialSystem(detachedContext, net.TCPDestination(address, port), nil)
 		}),
 	)
 	globalDialerMap[dest] = conn

+ 3 - 1
transport/internet/http/dialer.go

@@ -5,6 +5,7 @@ package http
 import (
 	"context"
 	gotls "crypto/tls"
+	core "github.com/v2fly/v2ray-core/v4"
 	"net/http"
 	"net/url"
 	"sync"
@@ -51,7 +52,8 @@ func getHTTPClient(ctx context.Context, dest net.Destination, tlsSettings *tls.C
 			}
 			address := net.ParseAddress(rawHost)
 
-			pconn, err := internet.DialSystem(ctx, net.TCPDestination(address, port), nil)
+			detachedContext := core.ToBackgroundDetachedContext(ctx)
+			pconn, err := internet.DialSystem(detachedContext, net.TCPDestination(address, port), nil)
 			if err != nil {
 				return nil, err
 			}