File tree Expand file tree Collapse file tree 1 file changed +19
-10
lines changed Expand file tree Collapse file tree 1 file changed +19
-10
lines changed Original file line number Diff line number Diff line change @@ -260,29 +260,38 @@ func (c *Conn) SetNodeCallback(callback func(node *Node)) {
260
260
DERPLatency : c .lastDERPLatency ,
261
261
}
262
262
}
263
+ // A send queue must be used so nodes are sent in order.
264
+ queue := make (chan * Node , 16 )
265
+ go func () {
266
+ for {
267
+ select {
268
+ case <- c .closed :
269
+ return
270
+ case node := <- queue :
271
+ callback (node )
272
+ }
273
+ }
274
+ }()
263
275
c .wireguardEngine .SetNetInfoCallback (func (ni * tailcfg.NetInfo ) {
264
276
c .lastMutex .Lock ()
265
277
c .lastPreferredDERP = ni .PreferredDERP
266
278
c .lastDERPLatency = ni .DERPLatency
267
279
node := makeNode ()
280
+ queue <- node
268
281
c .lastMutex .Unlock ()
269
- callback (node )
270
282
})
271
283
c .wireguardEngine .SetStatusCallback (func (s * wgengine.Status , err error ) {
272
284
if err != nil {
273
285
return
274
286
}
275
- endpoints := make ([]string , 0 , len (s .LocalAddrs ))
287
+ c .lastMutex .Lock ()
288
+ c .lastEndpoints = make ([]string , 0 , len (s .LocalAddrs ))
276
289
for _ , addr := range s .LocalAddrs {
277
- endpoints = append (endpoints , addr .Addr .String ())
290
+ c . lastEndpoints = append (c . lastEndpoints , addr .Addr .String ())
278
291
}
279
- go func () {
280
- c .lastMutex .Lock ()
281
- c .lastEndpoints = endpoints
282
- node := makeNode ()
283
- c .lastMutex .Unlock ()
284
- callback (node )
285
- }()
292
+ node := makeNode ()
293
+ queue <- node
294
+ c .lastMutex .Unlock ()
286
295
})
287
296
}
288
297
You can’t perform that action at this time.
0 commit comments