diff --git a/src/tuntap/ckr.go b/src/tuntap/ckr.go index ad8c89d4..229d2607 100644 --- a/src/tuntap/ckr.go +++ b/src/tuntap/ckr.go @@ -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() diff --git a/src/yggdrasil/api.go b/src/yggdrasil/api.go index 44cbad1d..2f684646 100644 --- a/src/yggdrasil/api.go +++ b/src/yggdrasil/api.go @@ -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 { diff --git a/src/yggdrasil/conn.go b/src/yggdrasil/conn.go index c56c2a90..4c222266 100644 --- a/src/yggdrasil/conn.go +++ b/src/yggdrasil/conn.go @@ -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() }) diff --git a/src/yggdrasil/core.go b/src/yggdrasil/core.go index ec530745..3719818b 100644 --- a/src/yggdrasil/core.go +++ b/src/yggdrasil/core.go @@ -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 }) } diff --git a/src/yggdrasil/debug.go b/src/yggdrasil/debug.go index 9d2199d0..4502c11e 100644 --- a/src/yggdrasil/debug.go +++ b/src/yggdrasil/debug.go @@ -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 diff --git a/src/yggdrasil/peer.go b/src/yggdrasil/peer.go index d33c413a..72ff2847 100644 --- a/src/yggdrasil/peer.go +++ b/src/yggdrasil/peer.go @@ -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() diff --git a/src/yggdrasil/router.go b/src/yggdrasil/router.go index bbc87c51..d93ba433 100644 --- a/src/yggdrasil/router.go +++ b/src/yggdrasil/router.go @@ -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) -} diff --git a/src/yggdrasil/switch.go b/src/yggdrasil/switch.go index 93d79d29..5c613d8d 100644 --- a/src/yggdrasil/switch.go +++ b/src/yggdrasil/switch.go @@ -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) -}