mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2025-04-28 22:25:07 +03:00
possibly fix deadlock from race in peer linkloop goroutine, add some related debug code to the admin
This commit is contained in:
parent
63aadf6e88
commit
e9adf327b0
4 changed files with 47 additions and 39 deletions
|
@ -41,17 +41,15 @@ type router struct {
|
|||
func (r *router) init(core *Core) {
|
||||
r.core = core
|
||||
r.addr = *address_addrForNodeID(&r.core.dht.nodeID)
|
||||
in := make(chan []byte, 32) // TODO something better than this...
|
||||
in := make(chan []byte, 32) // TODO something better than this...
|
||||
p := r.core.peers.newPeer(&r.core.boxPub, &r.core.sigPub) //, out, in)
|
||||
p.out = func(packet []byte) {
|
||||
// This is to make very sure it never blocks
|
||||
for {
|
||||
select {
|
||||
case in <- packet:
|
||||
return
|
||||
default:
|
||||
util_putBytes(<-in)
|
||||
}
|
||||
select {
|
||||
case in <- packet:
|
||||
return
|
||||
default:
|
||||
util_putBytes(packet)
|
||||
}
|
||||
}
|
||||
r.in = in
|
||||
|
@ -147,13 +145,10 @@ func (r *router) sendPacket(bs []byte) {
|
|||
fallthrough
|
||||
//default: go func() { sinfo.send<-bs }()
|
||||
default:
|
||||
for {
|
||||
select {
|
||||
case sinfo.send <- bs:
|
||||
return
|
||||
default:
|
||||
util_putBytes(<-sinfo.send)
|
||||
}
|
||||
select {
|
||||
case sinfo.send <- bs:
|
||||
default:
|
||||
util_putBytes(bs)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -191,7 +186,6 @@ func (r *router) handleIn(packet []byte) {
|
|||
case wire_ProtocolTraffic:
|
||||
r.handleProto(packet)
|
||||
default: /*panic("Should not happen in testing") ;*/
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -206,13 +200,10 @@ func (r *router) handleTraffic(packet []byte) {
|
|||
return
|
||||
}
|
||||
//go func () { sinfo.recv<-&p }()
|
||||
for {
|
||||
select {
|
||||
case sinfo.recv <- &p:
|
||||
return
|
||||
default:
|
||||
util_putBytes((<-sinfo.recv).payload)
|
||||
}
|
||||
select {
|
||||
case sinfo.recv <- &p:
|
||||
default:
|
||||
util_putBytes(p.payload)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue