Disconnect peers when stopping, stop modules before core

This commit is contained in:
Neil Alexander 2019-09-18 15:22:17 +01:00
parent 846df4789a
commit 00a972b74e
No known key found for this signature in database
GPG Key ID: A02A2019A2BB0944
2 changed files with 20 additions and 13 deletions

View File

@ -292,10 +292,10 @@ exit:
} }
func (n *node) shutdown() { func (n *node) shutdown() {
n.core.Stop()
n.admin.Stop() n.admin.Stop()
n.multicast.Stop() n.multicast.Stop()
n.tuntap.Stop() n.tuntap.Stop()
n.core.Stop()
os.Exit(0) os.Exit(0)
} }

View File

@ -21,16 +21,17 @@ type Core struct {
// We're going to keep our own copy of the provided config - that way we can // We're going to keep our own copy of the provided config - that way we can
// guarantee that it will be covered by the mutex // guarantee that it will be covered by the mutex
phony.Inbox phony.Inbox
config config.NodeState // Config config config.NodeState // Config
boxPub crypto.BoxPubKey boxPub crypto.BoxPubKey
boxPriv crypto.BoxPrivKey boxPriv crypto.BoxPrivKey
sigPub crypto.SigPubKey sigPub crypto.SigPubKey
sigPriv crypto.SigPrivKey sigPriv crypto.SigPrivKey
switchTable switchTable switchTable switchTable
peers peers peers peers
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 {
@ -110,7 +111,7 @@ func (c *Core) _addPeerLoop() {
} }
// 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)
}) })
} }
@ -177,7 +178,9 @@ func (c *Core) _start(nc *config.NodeConfig, log *log.Logger) (*config.NodeState
return nil, err return nil, err
} }
c.Act(c, c._addPeerLoop) c.addPeerTimer = time.AfterFunc(time.Second, func() {
c.Act(c, c._addPeerLoop)
})
c.log.Infoln("Startup complete") c.log.Infoln("Startup complete")
return &c.config, nil return &c.config, nil
@ -191,4 +194,8 @@ 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()
for _, peer := range c.GetPeers() {
c.DisconnectPeer(peer.Port)
}
} }