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
reader, writer := io.Pipe()
initXmuxClient := xmuxClient
initXmuxClient2 := xmuxClient2
conn := splitConn{
writer: writer,
onClose: func() {
if closed.Add(1) > 1 {
return
}
if initXmuxClient != nil {
initXmuxClient.OpenUsage.Add(-1)
if xmuxClient != nil {
xmuxClient.OpenUsage.Add(-1)
}
if initXmuxClient2 != nil && initXmuxClient2 != initXmuxClient {
initXmuxClient2.OpenUsage.Add(-1)
if xmuxClient2 != nil && xmuxClient2 != xmuxClient {
xmuxClient2.OpenUsage.Add(-1)
}
},
}
@@ -520,6 +518,8 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
}
doSplit := atomic.Bool{}
dynamicHTTPClient := httpClient
dynamicXmuxClient := xmuxClient
for doSplit.Store(true); doSplit.Load(); {
var chunk buf.MultiBuffer
remainder, chunk = buf.SplitSize(remainder, maxUploadSize)
@@ -544,13 +544,13 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
lastWrite = time.Now()
if xmuxClient != nil && (xmuxClient.LeftRequests.Add(-1) <= 0 ||
(xmuxClient.UnreusableAt != time.Time{} && lastWrite.After(xmuxClient.UnreusableAt))) {
httpClient, xmuxClient = getHTTPClient(ctx, dest, streamSettings)
if dynamicXmuxClient != nil && (dynamicXmuxClient.LeftRequests.Add(-1) <= 0 ||
(dynamicXmuxClient.UnreusableAt != time.Time{} && lastWrite.After(dynamicXmuxClient.UnreusableAt))) {
dynamicHTTPClient, dynamicXmuxClient = getHTTPClient(ctx, dest, streamSettings)
}
go func() {
err := httpClient.PostPacket(
go func(hClient DialerClient) {
err := hClient.PostPacket(
ctx,
requestURL.String(),
sessionId,
@@ -563,9 +563,9 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
uploadPipeReader.Interrupt()
doSplit.Store(false)
}
}()
}(dynamicHTTPClient)
if _, ok := httpClient.(*DefaultDialerClient); ok {
if _, ok := dynamicHTTPClient.(*DefaultDialerClient); ok {
<-wroteRequest.Wait()
}
}