This commit is contained in:
风扇滑翔翼
2026-05-23 22:30:38 +08:00
committed by GitHub
parent 1905907331
commit 5b1b70cc96
+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)
} }
}, },
} }
@@ -520,6 +518,8 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
} }
doSplit := atomic.Bool{} doSplit := atomic.Bool{}
dynamicHTTPClient := httpClient
dynamicXmuxClient := xmuxClient
for doSplit.Store(true); doSplit.Load(); { for doSplit.Store(true); doSplit.Load(); {
var chunk buf.MultiBuffer var chunk buf.MultiBuffer
remainder, chunk = buf.SplitSize(remainder, maxUploadSize) remainder, chunk = buf.SplitSize(remainder, maxUploadSize)
@@ -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()
} }
} }