Skip to content

Commit 526afb1

Browse files
committed
add cache timeout
1 parent 8112793 commit 526afb1

3 files changed

Lines changed: 23 additions & 15 deletions

File tree

dns/client.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,13 @@ func (c *Client) Exchange(ctx context.Context, transport adapter.DNSTransport, m
144144
if c.cache != nil {
145145
cond, loaded := c.cacheLock.LoadOrStore(question, make(chan struct{}))
146146
if loaded {
147-
<-cond
147+
select {
148+
case <-cond:
149+
case <-time.After(c.timeout):
150+
return nil, E.New("cache wait timeout")
151+
case <-ctx.Done():
152+
return nil, ctx.Err()
153+
}
148154
} else {
149155
defer func() {
150156
c.cacheLock.Delete(question)
@@ -154,7 +160,13 @@ func (c *Client) Exchange(ctx context.Context, transport adapter.DNSTransport, m
154160
} else if c.transportCache != nil {
155161
cond, loaded := c.transportCacheLock.LoadOrStore(question, make(chan struct{}))
156162
if loaded {
157-
<-cond
163+
select {
164+
case <-cond:
165+
case <-time.After(c.timeout):
166+
return nil, E.New("cache wait timeout")
167+
case <-ctx.Done():
168+
return nil, ctx.Err()
169+
}
158170
} else {
159171
defer func() {
160172
c.transportCacheLock.Delete(question)

go.mod

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ require (
2323
github.com/libdns/alidns v1.0.6-beta.3
2424
github.com/libdns/cloudflare v0.2.2
2525
github.com/logrusorgru/aurora v2.0.3+incompatible
26+
github.com/mahsanet/dnstt v0.0.0-20260208072932-d75b50056612
2627
github.com/metacubex/utls v1.8.4
2728
github.com/mholt/acmez/v3 v3.1.4
2829
github.com/miekg/dns v1.1.69
@@ -147,7 +148,6 @@ require (
147148
github.com/klauspost/reedsolomon v1.12.0 // indirect
148149
github.com/libdns/libdns v1.1.1 // indirect
149150
github.com/libp2p/go-reuseport v0.4.0 // indirect
150-
github.com/mahsanet/dnstt v0.0.0-20260208072932-d75b50056612 // indirect
151151
github.com/marusama/semaphore v0.0.0-20171214154724-565ffd8e868a // indirect
152152
github.com/mdlayher/netlink v1.7.3-0.20250113171957-fbb4dce95f42 // indirect
153153
github.com/mdlayher/socket v0.5.1 // indirect
@@ -217,15 +217,13 @@ require (
217217
github.com/tailscale/netlink v1.1.1-0.20240822203006-4d49adab4de7 // indirect
218218
github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc // indirect
219219
github.com/tailscale/web-client-prebuilt v0.0.0-20250124233751-d4cd19a26976 // indirect
220-
github.com/templexxx/cpu v0.1.0 // indirect
221-
github.com/templexxx/xorsimd v0.4.2 // indirect
222220
github.com/tidwall/sjson v1.2.5 // indirect
223221
github.com/tjfoc/gmsm v1.4.1 // indirect
224222
github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 // indirect
225223
github.com/wader/filtertransport v0.0.0-20200316221534-bdd9e61eee78 // indirect
226224
github.com/wlynxg/anet v0.0.5 // indirect
227225
github.com/x448/float16 v0.8.4 // indirect
228-
github.com/xtaci/kcp-go/v5 v5.6.8 // indirect
226+
github.com/xtaci/kcp-go/v5 v5.6.70 // indirect
229227
github.com/xtaci/smux v1.5.24 // indirect
230228
github.com/zeebo/blake3 v0.2.4 // indirect
231229
gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/goptlib v1.5.0 // indirect
@@ -234,7 +232,7 @@ require (
234232
go4.org/mem v0.0.0-20240501181205-ae6ca9944745 // indirect
235233
golang.org/x/oauth2 v0.32.0 // indirect
236234
golang.org/x/term v0.39.0 // indirect
237-
golang.org/x/time v0.11.0 // indirect
235+
golang.org/x/time v0.14.0 // indirect
238236
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect
239237
golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 // indirect
240238
golang.zx2c4.com/wireguard/windows v0.5.3 // indirect

go.sum

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -510,10 +510,6 @@ github.com/tailscale/web-client-prebuilt v0.0.0-20250124233751-d4cd19a26976 h1:U
510510
github.com/tailscale/web-client-prebuilt v0.0.0-20250124233751-d4cd19a26976/go.mod h1:agQPE6y6ldqCOui2gkIh7ZMztTkIQKH049tv8siLuNQ=
511511
github.com/tc-hib/winres v0.2.1 h1:YDE0FiP0VmtRaDn7+aaChp1KiF4owBiJa5l964l5ujA=
512512
github.com/tc-hib/winres v0.2.1/go.mod h1:C/JaNhH3KBvhNKVbvdlDWkbMDO9H4fKKDaN7/07SSuk=
513-
github.com/templexxx/cpu v0.1.0 h1:wVM+WIJP2nYaxVxqgHPD4wGA2aJ9rvrQRV8CvFzNb40=
514-
github.com/templexxx/cpu v0.1.0/go.mod h1:w7Tb+7qgcAlIyX4NhLuDKt78AHA5SzPmq0Wj6HiEnnk=
515-
github.com/templexxx/xorsimd v0.4.2 h1:ocZZ+Nvu65LGHmCLZ7OoCtg8Fx8jnHKK37SjvngUoVI=
516-
github.com/templexxx/xorsimd v0.4.2/go.mod h1:HgwaPoDREdi6OnULpSfxhzaiiSUY4Fi3JPn1wpt28NI=
517513
github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
518514
github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY=
519515
github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
@@ -543,8 +539,10 @@ github.com/wlynxg/anet v0.0.5 h1:J3VJGi1gvo0JwZ/P1/Yc/8p63SoW98B5dHkYDmpgvvU=
543539
github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA=
544540
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
545541
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
546-
github.com/xtaci/kcp-go/v5 v5.6.8 h1:jlI/0jAyjoOjT/SaGB58s4bQMJiNS41A2RKzR6TMWeI=
547-
github.com/xtaci/kcp-go/v5 v5.6.8/go.mod h1:oE9j2NVqAkuKO5o8ByKGch3vgVX3BNf8zqP8JiGq0bM=
542+
github.com/xtaci/kcp-go/v5 v5.6.70 h1:AYX0QZl6PqmNj2IdYGZGuBfZuDUkUfl+eHYNijCqaO0=
543+
github.com/xtaci/kcp-go/v5 v5.6.70/go.mod h1:9O3D8WR+cyyUjGiTILYfg17vn72otWuXK2AFfqIe6CM=
544+
github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae h1:J0GxkO96kL4WF+AIT3M4mfUVinOCPgf2uUWYFUzN0sM=
545+
github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae/go.mod h1:gXtu8J62kEgmN++bm9BVICuT/e8yiLI2KFobd/TRFsE=
548546
github.com/xtaci/smux v1.5.24 h1:77emW9dtnOxxOQ5ltR+8BbsX1kzcOxQ5gB+aaV9hXOY=
549547
github.com/xtaci/smux v1.5.24/go.mod h1:OMlQbT5vcgl2gb49mFkYo6SMf+zP3rcjcwQz7ZU7IGY=
550548
github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
@@ -695,8 +693,8 @@ golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
695693
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
696694
golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE=
697695
golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8=
698-
golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0=
699-
golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
696+
golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=
697+
golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
700698
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
701699
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
702700
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=

0 commit comments

Comments
 (0)