Skip to content

Commit 5f3c47e

Browse files
authored
Merge pull request #1405 from apernet/fix-tun
[TUN] Fix goroutine leak & broken DNS
2 parents 88890dd + bc41b5f commit 5f3c47e

File tree

3 files changed

+15
-15
lines changed

3 files changed

+15
-15
lines changed

app/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require (
88
github.com/apernet/go-tproxy v0.0.0-20230809025308-8f4723fd742f
99
github.com/apernet/hysteria/core/v2 v2.0.0-00010101000000-000000000000
1010
github.com/apernet/hysteria/extras/v2 v2.0.0-00010101000000-000000000000
11-
github.com/apernet/sing-tun v0.2.6-0.20240323130332-b9f6511036ad
11+
github.com/apernet/sing-tun v0.2.6-0.20250726070404-c99085f9af13
1212
github.com/caddyserver/certmagic v0.17.2
1313
github.com/libdns/cloudflare v0.1.1
1414
github.com/libdns/duckdns v0.2.0

app/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ github.com/apernet/go-tproxy v0.0.0-20230809025308-8f4723fd742f h1:uVh0qpEslrWjg
4444
github.com/apernet/go-tproxy v0.0.0-20230809025308-8f4723fd742f/go.mod h1:xkkq9D4ygcldQQhKS/w9CadiCKwCngU7K9E3DaKahpM=
4545
github.com/apernet/quic-go v0.52.1-0.20250607183305-9320c9d14431 h1:9/jM7e+kVALd7Jfu1c27dcEpT/Fd/Gzq2OsQjKjakKI=
4646
github.com/apernet/quic-go v0.52.1-0.20250607183305-9320c9d14431/go.mod h1:I/47OIGG5H/IfAm+nz2c6hm6b/NkEhpvptAoiPcY7jQ=
47-
github.com/apernet/sing-tun v0.2.6-0.20240323130332-b9f6511036ad h1:QzQ2sKpc9o42HNRR8ukM5uMC/RzR2HgZd/Nvaqol2C0=
48-
github.com/apernet/sing-tun v0.2.6-0.20240323130332-b9f6511036ad/go.mod h1:S5IydyLSN/QAfvY+r2GoomPJ6hidtXWm/Ad18sJVssk=
47+
github.com/apernet/sing-tun v0.2.6-0.20250726070404-c99085f9af13 h1:gzets97c/u5iMj1zjanMBVkIYOdaVw+RXPzTT1xQoyM=
48+
github.com/apernet/sing-tun v0.2.6-0.20250726070404-c99085f9af13/go.mod h1:S5IydyLSN/QAfvY+r2GoomPJ6hidtXWm/Ad18sJVssk=
4949
github.com/babolivier/go-doh-client v0.0.0-20201028162107-a76cff4cb8b6 h1:4NNbNM2Iq/k57qEu7WfL67UrbPq1uFWxW4qODCohi+0=
5050
github.com/babolivier/go-doh-client v0.0.0-20201028162107-a76cff4cb8b6/go.mod h1:J29hk+f9lJrblVIfiJOtTFk+OblBawmib4uz/VdKzlg=
5151
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=

app/internal/tun/server.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,7 @@ func (t *tunHandler) NewConnection(ctx context.Context, conn net.Conn, m metadat
123123
defer rc.Close()
124124

125125
// start forwarding
126-
copyErrChan := make(chan error, 3)
127-
go func() {
128-
<-ctx.Done()
129-
copyErrChan <- ctx.Err()
130-
}()
126+
copyErrChan := make(chan error, 2)
131127
go func() {
132128
_, copyErr := io.Copy(rc, conn)
133129
copyErrChan <- copyErr
@@ -136,7 +132,11 @@ func (t *tunHandler) NewConnection(ctx context.Context, conn net.Conn, m metadat
136132
_, copyErr := io.Copy(conn, rc)
137133
copyErrChan <- copyErr
138134
}()
139-
closeErr = <-copyErrChan
135+
select {
136+
case <-ctx.Done():
137+
closeErr = ctx.Err()
138+
case closeErr = <-copyErrChan:
139+
}
140140
return nil
141141
}
142142

@@ -160,11 +160,7 @@ func (t *tunHandler) NewPacketConnection(ctx context.Context, conn network.Packe
160160
defer rc.Close()
161161

162162
// start forwarding
163-
copyErrChan := make(chan error, 3)
164-
go func() {
165-
<-ctx.Done()
166-
copyErrChan <- ctx.Err()
167-
}()
163+
copyErrChan := make(chan error, 2)
168164
// local <- remote
169165
go func() {
170166
for {
@@ -205,7 +201,11 @@ func (t *tunHandler) NewPacketConnection(ctx context.Context, conn network.Packe
205201
}
206202
}
207203
}()
208-
closeErr = <-copyErrChan
204+
select {
205+
case <-ctx.Done():
206+
closeErr = ctx.Err()
207+
case closeErr = <-copyErrChan:
208+
}
209209
return nil
210210
}
211211

0 commit comments

Comments
 (0)