@@ -34,6 +34,8 @@ func lookupProtocol(name string) (proto int, err error) {
34
34
}
35
35
ch := make (chan result )
36
36
go func () {
37
+ acquireThread ()
38
+ defer releaseThread ()
37
39
runtime .LockOSThread ()
38
40
defer runtime .UnlockOSThread ()
39
41
proto , err := getprotobyname (name )
@@ -56,6 +58,7 @@ func lookupHost(name string) (addrs []string, err error) {
56
58
}
57
59
58
60
func gethostbyname (name string ) (addrs []IP , err error ) {
61
+ // caller already acquired thread
59
62
h , err := syscall .GetHostByName (name )
60
63
if err != nil {
61
64
return nil , os .NewSyscallError ("GetHostByName" , err )
@@ -83,6 +86,8 @@ func oldLookupIP(name string) (addrs []IP, err error) {
83
86
}
84
87
ch := make (chan result )
85
88
go func () {
89
+ acquireThread ()
90
+ defer releaseThread ()
86
91
runtime .LockOSThread ()
87
92
defer runtime .UnlockOSThread ()
88
93
addrs , err := gethostbyname (name )
@@ -93,6 +98,8 @@ func oldLookupIP(name string) (addrs []IP, err error) {
93
98
}
94
99
95
100
func newLookupIP (name string ) (addrs []IP , err error ) {
101
+ acquireThread ()
102
+ defer releaseThread ()
96
103
hints := syscall.AddrinfoW {
97
104
Family : syscall .AF_UNSPEC ,
98
105
Socktype : syscall .SOCK_STREAM ,
@@ -122,6 +129,8 @@ func newLookupIP(name string) (addrs []IP, err error) {
122
129
}
123
130
124
131
func getservbyname (network , service string ) (port int , err error ) {
132
+ acquireThread ()
133
+ defer releaseThread ()
125
134
switch network {
126
135
case "tcp4" , "tcp6" :
127
136
network = "tcp"
@@ -144,6 +153,8 @@ func oldLookupPort(network, service string) (port int, err error) {
144
153
}
145
154
ch := make (chan result )
146
155
go func () {
156
+ acquireThread ()
157
+ defer releaseThread ()
147
158
runtime .LockOSThread ()
148
159
defer runtime .UnlockOSThread ()
149
160
port , err := getservbyname (network , service )
@@ -154,6 +165,8 @@ func oldLookupPort(network, service string) (port int, err error) {
154
165
}
155
166
156
167
func newLookupPort (network , service string ) (port int , err error ) {
168
+ acquireThread ()
169
+ defer releaseThread ()
157
170
var stype int32
158
171
switch network {
159
172
case "tcp4" , "tcp6" :
@@ -188,6 +201,8 @@ func newLookupPort(network, service string) (port int, err error) {
188
201
}
189
202
190
203
func lookupCNAME (name string ) (cname string , err error ) {
204
+ acquireThread ()
205
+ defer releaseThread ()
191
206
var r * syscall.DNSRecord
192
207
e := syscall .DnsQuery (name , syscall .DNS_TYPE_CNAME , 0 , nil , & r , nil )
193
208
if e != nil {
@@ -202,6 +217,8 @@ func lookupCNAME(name string) (cname string, err error) {
202
217
}
203
218
204
219
func lookupSRV (service , proto , name string ) (cname string , addrs []* SRV , err error ) {
220
+ acquireThread ()
221
+ defer releaseThread ()
205
222
var target string
206
223
if service == "" && proto == "" {
207
224
target = name
@@ -224,6 +241,8 @@ func lookupSRV(service, proto, name string) (cname string, addrs []*SRV, err err
224
241
}
225
242
226
243
func lookupMX (name string ) (mx []* MX , err error ) {
244
+ acquireThread ()
245
+ defer releaseThread ()
227
246
var r * syscall.DNSRecord
228
247
e := syscall .DnsQuery (name , syscall .DNS_TYPE_MX , 0 , nil , & r , nil )
229
248
if e != nil {
@@ -240,6 +259,8 @@ func lookupMX(name string) (mx []*MX, err error) {
240
259
}
241
260
242
261
func lookupNS (name string ) (ns []* NS , err error ) {
262
+ acquireThread ()
263
+ defer releaseThread ()
243
264
var r * syscall.DNSRecord
244
265
e := syscall .DnsQuery (name , syscall .DNS_TYPE_NS , 0 , nil , & r , nil )
245
266
if e != nil {
@@ -255,6 +276,8 @@ func lookupNS(name string) (ns []*NS, err error) {
255
276
}
256
277
257
278
func lookupTXT (name string ) (txt []string , err error ) {
279
+ acquireThread ()
280
+ defer releaseThread ()
258
281
var r * syscall.DNSRecord
259
282
e := syscall .DnsQuery (name , syscall .DNS_TYPE_TEXT , 0 , nil , & r , nil )
260
283
if e != nil {
@@ -273,6 +296,8 @@ func lookupTXT(name string) (txt []string, err error) {
273
296
}
274
297
275
298
func lookupAddr (addr string ) (name []string , err error ) {
299
+ acquireThread ()
300
+ defer releaseThread ()
276
301
arpa , err := reverseaddr (addr )
277
302
if err != nil {
278
303
return nil , err
0 commit comments