This commit is contained in:
风扇滑翔翼
2026-05-23 22:30:38 +08:00
committed by Fangliding
parent 1905907331
commit 1ec3ad752f
+13 -13
View File
@@ -439,19 +439,17 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
var closed atomic.Int32 var closed atomic.Int32
reader, writer := io.Pipe() reader, writer := io.Pipe()
initXmuxClient := xmuxClient
initXmuxClient2 := xmuxClient2
conn := splitConn{ conn := splitConn{
writer: writer, writer: writer,
onClose: func() { onClose: func() {
if closed.Add(1) > 1 { if closed.Add(1) > 1 {
return return
} }
if initXmuxClient != nil { if xmuxClient != nil {
initXmuxClient.OpenUsage.Add(-1) xmuxClient.OpenUsage.Add(-1)
} }
if initXmuxClient2 != nil && initXmuxClient2 != initXmuxClient { if xmuxClient2 != nil && xmuxClient2 != xmuxClient {
initXmuxClient2.OpenUsage.Add(-1) xmuxClient2.OpenUsage.Add(-1)
} }
}, },
} }
@@ -510,6 +508,8 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
var seq int64 var seq int64
var lastWrite time.Time var lastWrite time.Time
dynamicHTTPClient := httpClient
dynamicXmuxClient := xmuxClient
for { for {
// by offloading the uploads into a buffered pipe, multiple conn.Write // by offloading the uploads into a buffered pipe, multiple conn.Write
// calls get automatically batched together into larger POST requests. // calls get automatically batched together into larger POST requests.
@@ -544,13 +544,13 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
lastWrite = time.Now() lastWrite = time.Now()
if xmuxClient != nil && (xmuxClient.LeftRequests.Add(-1) <= 0 || if dynamicXmuxClient != nil && (dynamicXmuxClient.LeftRequests.Add(-1) <= 0 ||
(xmuxClient.UnreusableAt != time.Time{} && lastWrite.After(xmuxClient.UnreusableAt))) { (dynamicXmuxClient.UnreusableAt != time.Time{} && lastWrite.After(dynamicXmuxClient.UnreusableAt))) {
httpClient, xmuxClient = getHTTPClient(ctx, dest, streamSettings) dynamicHTTPClient, dynamicXmuxClient = getHTTPClient(ctx, dest, streamSettings)
} }
go func() { go func(hClient DialerClient) {
err := httpClient.PostPacket( err := hClient.PostPacket(
ctx, ctx,
requestURL.String(), requestURL.String(),
sessionId, sessionId,
@@ -563,9 +563,9 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
uploadPipeReader.Interrupt() uploadPipeReader.Interrupt()
doSplit.Store(false) doSplit.Store(false)
} }
}() }(dynamicHTTPClient)
if _, ok := httpClient.(*DefaultDialerClient); ok { if _, ok := dynamicHTTPClient.(*DefaultDialerClient); ok {
<-wroteRequest.Wait() <-wroteRequest.Wait()
} }
} }