mirror of
https://github.com/cwinfo/yggdrasil-go.git
synced 2024-11-26 11:51:37 +00:00
Cherrypick fixes for _addPeerLoop memory leak for now
This commit is contained in:
parent
909e4e29a8
commit
5a382e7e0b
@ -368,14 +368,35 @@ func (c *Core) SetLogger(log *log.Logger) {
|
|||||||
// connection drops.
|
// connection drops.
|
||||||
func (c *Core) AddPeer(addr string, sintf string) error {
|
func (c *Core) AddPeer(addr string, sintf string) error {
|
||||||
if err := c.CallPeer(addr, sintf); err != nil {
|
if err := c.CallPeer(addr, sintf); err != nil {
|
||||||
|
// TODO: We maybe want this to write the peer to the persistent
|
||||||
|
// configuration even if a connection attempt fails, but first we'll need to
|
||||||
|
// move the code to check the peer URI so that we don't deliberately save a
|
||||||
|
// peer with a known bad URI. Loading peers from config should really do the
|
||||||
|
// same thing too but I don't think that happens today
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
c.config.Mutex.Lock()
|
c.config.Mutex.Lock()
|
||||||
if sintf == "" {
|
if sintf == "" {
|
||||||
|
for _, peer := range c.config.Current.Peers {
|
||||||
|
if peer == addr {
|
||||||
|
return errors.New("peer already added")
|
||||||
|
}
|
||||||
|
}
|
||||||
c.config.Current.Peers = append(c.config.Current.Peers, addr)
|
c.config.Current.Peers = append(c.config.Current.Peers, addr)
|
||||||
|
} else {
|
||||||
|
if _, ok := c.config.Current.InterfacePeers[sintf]; ok {
|
||||||
|
for _, peer := range c.config.Current.InterfacePeers[sintf] {
|
||||||
|
if peer == addr {
|
||||||
|
return errors.New("peer already added")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _, ok := c.config.Current.InterfacePeers[sintf]; !ok {
|
||||||
|
c.config.Current.InterfacePeers[sintf] = []string{addr}
|
||||||
} else {
|
} else {
|
||||||
c.config.Current.InterfacePeers[sintf] = append(c.config.Current.InterfacePeers[sintf], addr)
|
c.config.Current.InterfacePeers[sintf] = append(c.config.Current.InterfacePeers[sintf], addr)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
c.config.Mutex.Unlock()
|
c.config.Mutex.Unlock()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,7 @@ type Core struct {
|
|||||||
router router
|
router router
|
||||||
link link
|
link link
|
||||||
log *log.Logger
|
log *log.Logger
|
||||||
|
addPeerTimer *time.Timer
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Core) _init() error {
|
func (c *Core) _init() error {
|
||||||
@ -91,7 +92,7 @@ func (c *Core) _addPeerLoop() {
|
|||||||
|
|
||||||
// Add peers from the Peers section
|
// Add peers from the Peers section
|
||||||
for _, peer := range current.Peers {
|
for _, peer := range current.Peers {
|
||||||
if err := c.AddPeer(peer, ""); err != nil {
|
if err := c.CallPeer(peer, ""); err != nil {
|
||||||
c.log.Errorln("Failed to add peer:", err)
|
c.log.Errorln("Failed to add peer:", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -99,14 +100,14 @@ func (c *Core) _addPeerLoop() {
|
|||||||
// Add peers from the InterfacePeers section
|
// Add peers from the InterfacePeers section
|
||||||
for intf, intfpeers := range current.InterfacePeers {
|
for intf, intfpeers := range current.InterfacePeers {
|
||||||
for _, peer := range intfpeers {
|
for _, peer := range intfpeers {
|
||||||
if err := c.AddPeer(peer, intf); err != nil {
|
if err := c.CallPeer(peer, intf); err != nil {
|
||||||
c.log.Errorln("Failed to add peer:", err)
|
c.log.Errorln("Failed to add peer:", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sit for a while
|
// Sit for a while
|
||||||
time.AfterFunc(time.Minute, func() {
|
c.addPeerTimer = time.AfterFunc(time.Minute, func() {
|
||||||
c.Act(c, c._addPeerLoop)
|
c.Act(c, c._addPeerLoop)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -187,4 +188,5 @@ func (c *Core) Stop() {
|
|||||||
// This function is unsafe and should only be ran by the core actor.
|
// This function is unsafe and should only be ran by the core actor.
|
||||||
func (c *Core) _stop() {
|
func (c *Core) _stop() {
|
||||||
c.log.Infoln("Stopping...")
|
c.log.Infoln("Stopping...")
|
||||||
|
c.addPeerTimer.Stop()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user