correctly clean up various things

This commit is contained in:
Arceliar 2019-01-22 21:48:43 -06:00
parent eb8951081d
commit f936151f2d
2 changed files with 12 additions and 4 deletions

View File

@ -114,7 +114,12 @@ func (intf *linkInterface) handler() error {
} else {
intf.closed = make(chan struct{})
intf.link.interfaces[intf.info] = intf
defer close(intf.closed)
defer func() {
intf.link.mutex.Lock()
delete(intf.link.interfaces, intf.info)
intf.link.mutex.Unlock()
close(intf.closed)
}()
intf.link.core.log.Println("DEBUG: registered interface for", intf.name)
}
intf.link.mutex.Unlock()
@ -144,7 +149,10 @@ func (intf *linkInterface) handler() error {
timer := time.NewTimer(interval)
clearTimer := func() {
if !timer.Stop() {
<-timer.C
select {
case <-timer.C:
default:
}
}
}
defer clearTimer()

View File

@ -294,8 +294,8 @@ func (iface *tcpInterface) handler(sock net.Conn, incoming bool) {
panic(err)
}
iface.core.log.Println("DEBUG: starting handler for", name)
link.handler()
iface.core.log.Println("DEBUG: stopped handler for", name)
err = link.handler()
iface.core.log.Println("DEBUG: stopped handler for", name, err)
}
// This exchanges/checks connection metadata, sets up the peer struct, sets up the writer goroutine, and then runs the reader within the current goroutine.