5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-11-10 05:10:26 +00:00

Remove router.doAdmin and switchTable.doAdmin

This commit is contained in:
Neil Alexander 2019-08-28 12:17:19 +01:00
parent a8b323acdd
commit 5d7d84f827
No known key found for this signature in database
GPG Key ID: A02A2019A2BB0944
8 changed files with 15 additions and 25 deletions

View File

@ -56,8 +56,7 @@ func (c *cryptokey) init(tun *TunAdapter) {
}
}
// Configure the CKR routes - this must only ever be called from the router
// goroutine, e.g. through router.doAdmin
// Configure the CKR routes.
func (c *cryptokey) configure() error {
current := c.tun.config.GetCurrent()

View File

@ -178,7 +178,7 @@ func (c *Core) GetDHT() []DHTEntry {
dhtentries = append(dhtentries, info)
}
}
c.router.doAdmin(getDHT)
phony.Block(c.router, getDHT)
return dhtentries
}
@ -205,9 +205,8 @@ func (c *Core) GetSwitchQueues() SwitchQueues {
}
switchqueues.Queues = append(switchqueues.Queues, queue)
}
}
c.switchTable.doAdmin(getSwitchQueues)
phony.Block(c.switchTable, getSwitchQueues)
return switchqueues
}
@ -244,7 +243,7 @@ func (c *Core) GetSessions() []Session {
sessions = append(sessions, session)
}
}
c.router.doAdmin(getSessions)
phony.Block(c.router, getSessions)
return sessions
}
@ -345,7 +344,7 @@ func (c *Core) GetNodeInfo(key crypto.BoxPubKey, coords []uint64, nocache bool)
})
c.router.nodeinfo.sendNodeInfo(key, wire_coordsUint64stoBytes(coords), false)
}
c.router.doAdmin(sendNodeInfoRequest)
phony.Block(c.router, sendNodeInfoRequest)
timer := time.AfterFunc(6*time.Second, func() { close(response) })
defer timer.Stop()
for res := range response {
@ -455,7 +454,7 @@ func (c *Core) DHTPing(key crypto.BoxPubKey, coords []uint64, target *crypto.Nod
})
c.router.dht.ping(&info, &rq.dest)
}
c.router.doAdmin(sendPing)
phony.Block(c.router, sendPing)
// TODO: do something better than the below...
res := <-resCh
if res != nil {

View File

@ -92,7 +92,9 @@ func (c *Conn) setMTU(from phony.Actor, mtu uint16) {
func (c *Conn) search() error {
var sinfo *searchInfo
var isIn bool
c.core.router.doAdmin(func() { sinfo, isIn = c.core.router.searches.searches[*c.nodeID] })
phony.Block(c.core.router, func() {
sinfo, isIn = c.core.router.searches.searches[*c.nodeID]
})
if !isIn {
done := make(chan struct{}, 1)
var sess *sessionInfo
@ -106,7 +108,7 @@ func (c *Conn) search() error {
default:
}
}
c.core.router.doAdmin(func() {
phony.Block(c.core.router, func() {
sinfo = c.core.router.searches.newIterSearch(c.nodeID, c.nodeMask, searchCompleted)
sinfo.continueSearch()
})

View File

@ -6,6 +6,7 @@ import (
"io/ioutil"
"time"
"github.com/Arceliar/phony"
"github.com/gologme/log"
"github.com/yggdrasil-network/yggdrasil-go/src/config"
@ -175,7 +176,7 @@ func (c *Core) Start(nc *config.NodeConfig, log *log.Logger) (*config.NodeState,
c.config.Mutex.RLock()
if c.config.Current.SwitchOptions.MaxTotalQueueSize >= SwitchQueueTotalMinSize {
c.switchTable.doAdmin(func() {
phony.Block(c.switchTable, func() {
c.switchTable.queues.totalMaxSize = c.config.Current.SwitchOptions.MaxTotalQueueSize
})
}

View File

@ -259,7 +259,7 @@ func DEBUG_wire_encode_coords(coords []byte) []byte {
func (c *Core) DEBUG_getDHTSize() int {
var total int
c.router.doAdmin(func() {
phony.Block(c.router, func() {
total = len(c.router.dht.table)
})
return total

View File

@ -149,7 +149,7 @@ func (ps *peers) removePeer(port switchPort) {
if port == 0 {
return
} // Can't remove self peer
ps.core.router.doAdmin(func() {
phony.Block(ps.core.router, func() {
ps.core.switchTable.forgetPeer(port)
})
ps.mutex.Lock()

View File

@ -251,8 +251,3 @@ func (r *router) _handleNodeInfo(bs []byte, fromKey *crypto.BoxPubKey) {
req.SendPermPub = *fromKey
r.nodeinfo.handleNodeInfo(&req)
}
// TODO remove this, have things either be actors that send message or else call Block directly
func (r *router) doAdmin(f func()) {
phony.Block(r, f)
}

View File

@ -278,7 +278,7 @@ func (t *switchTable) blockPeer(port switchPort) {
}
// Removes a peer.
// Must be called by the router mainLoop goroutine, e.g. call router.doAdmin with a lambda that calls this.
// Must be called by the router actor with a lambda that calls this.
// If the removed peer was this node's parent, it immediately tries to find a new parent.
func (t *switchTable) forgetPeer(port switchPort) {
t.mutex.Lock()
@ -866,9 +866,3 @@ func (t *switchTable) _idleIn(port switchPort) {
t.idle[port] = time.Now()
}
}
// Passed a function to call.
// This will send the function to t.admin and block until it finishes.
func (t *switchTable) doAdmin(f func()) {
phony.Block(t, f)
}