diff --git a/peer_cache.go b/peer_cache.go index a6c29f4e..fc0c2b2a 100644 --- a/peer_cache.go +++ b/peer_cache.go @@ -5,17 +5,17 @@ import ( "encoding/gob" "fmt" "io" - "log" "sync" ) type PeerCache struct { sync.RWMutex table map[PeerName]*Peer + onGC func(*Peer) } -func NewPeerCache() *PeerCache { - return &PeerCache{table: make(map[PeerName]*Peer)} +func NewPeerCache(onGC func(*Peer)) *PeerCache { + return &PeerCache{table: make(map[PeerName]*Peer), onGC: onGC} } func (cache *PeerCache) FetchWithDefault(peer *Peer) *Peer { @@ -129,7 +129,7 @@ func (cache *PeerCache) garbageCollect(ourself *Peer) []*Peer { for name, peer := range cache.table { found, _ := ourself.HasPathTo(peer, false) if !found && !peer.IsLocallyReferenced() { - log.Println("Removing unreachable", peer) + cache.onGC(peer) delete(cache.table, name) ourself.Router.Macs.Delete(peer) removed = append(removed, peer) diff --git a/router.go b/router.go index 649777fc..ac8ae5fb 100644 --- a/router.go +++ b/router.go @@ -18,10 +18,13 @@ func NewRouter(iface *net.Interface, name PeerName, password []byte, connLimit i onMacExpiry := func(mac net.HardwareAddr, peer *Peer) { log.Println("Expired MAC", mac, "at", peer.Name) } + onPeerGC := func(peer *Peer) { + log.Println("Removing unreachable", peer) + } router := &Router{ Iface: iface, Macs: NewMacCache(macMaxAge, onMacExpiry), - Peers: NewPeerCache(), + Peers: NewPeerCache(onPeerGC), ConnLimit: connLimit, BufSz: bufSz, LogFrame: logFrame}