Merge pull request #117 from Arceliar/panicfix

closed channel send bugfix
This commit is contained in:
Arceliar 2018-06-13 00:33:48 -05:00 committed by GitHub
commit ad1ba2c8ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -166,17 +166,24 @@ func (ps *peers) sendSwitchMsgs() {
if p.port == 0 {
continue
}
select {
case p.doSend <- struct{}{}:
default:
}
p.doSendSwitchMsgs()
}
}
// If called, sends a notification to the peer's linkLoop to trigger a switchMsg send.
// Mainly called by sendSwitchMsgs or during linkLoop startup.
func (p *peer) doSendSwitchMsgs() {
defer func() { recover() }() // In case there's a race with close(p.doSend)
select {
case p.doSend <- struct{}{}:
default:
}
}
// This must be launched in a separate goroutine by whatever sets up the peer struct.
// It handles link protocol traffic.
func (p *peer) linkLoop() {
go func() { p.doSend <- struct{}{} }()
go p.doSendSwitchMsgs()
tick := time.NewTicker(time.Second)
defer tick.Stop()
for {