@@ -303,16 +303,19 @@ func (c *Conn) UpdateNodes(nodes []*Node) error {
303
303
for _ , peer := range c .netMap .Peers {
304
304
if peerStatus , ok := status .Peer [peer .Key ]; ok {
305
305
// Clear out inactive connections!
306
- if ! peerStatus .Active {
306
+ // If a connection hasn't been active for a minute post creation, we assume it's dead.
307
+ if ! peerStatus .Active && peer .Created .Before (time .Now ().Add (- time .Minute )) {
308
+ c .logger .Debug (context .Background (), "clearing peer" , slog .F ("peerStatus" , peerStatus ))
307
309
continue
308
310
}
309
311
}
310
312
peerMap [peer .ID ] = peer
311
313
}
312
314
for _ , node := range nodes {
313
315
peerStatus , ok := status .Peer [node .Key ]
314
- peerMap [ node . ID ] = & tailcfg.Node {
316
+ peerNode : = & tailcfg.Node {
315
317
ID : node .ID ,
318
+ Created : time .Now (),
316
319
Key : node .Key ,
317
320
DiscoKey : node .DiscoKey ,
318
321
Addresses : node .Addresses ,
@@ -325,6 +328,11 @@ func (c *Conn) UpdateNodes(nodes []*Node) error {
325
328
// reason. TODO: @kylecarbs debug this!
326
329
KeepAlive : ok && peerStatus .Active ,
327
330
}
331
+ existingNode , ok := peerMap [node .ID ]
332
+ if ok {
333
+ peerNode .Created = existingNode .Created
334
+ }
335
+ peerMap [node .ID ] = peerNode
328
336
}
329
337
c .netMap .Peers = make ([]* tailcfg.Node , 0 , len (peerMap ))
330
338
for _ , peer := range peerMap {
0 commit comments