fix concurrency bug in iface.go

This commit is contained in:
Arceliar 2019-06-29 18:44:24 -05:00
parent 0fb1165b76
commit 28db566b37

View File

@ -225,11 +225,11 @@ func (tun *TunAdapter) reader() error {
panic("Given empty dstNodeID and dstNodeIDMask - this shouldn't happen") panic("Given empty dstNodeID and dstNodeIDMask - this shouldn't happen")
} }
// Dial to the remote node // Dial to the remote node
packet := append(util.GetBytes(), bs[:n]...)
go func() { go func() {
// FIXME just spitting out a goroutine to do this is kind of ugly and means we drop packets until the dial finishes // FIXME just spitting out a goroutine to do this is kind of ugly and means we drop packets until the dial finishes
tun.mutex.Lock() tun.mutex.Lock()
_, known := tun.dials[*dstNodeID] _, known := tun.dials[*dstNodeID]
packet := append(util.GetBytes(), bs[:n]...)
tun.dials[*dstNodeID] = append(tun.dials[*dstNodeID], packet) tun.dials[*dstNodeID] = append(tun.dials[*dstNodeID], packet)
for len(tun.dials[*dstNodeID]) > 32 { for len(tun.dials[*dstNodeID]) > 32 {
util.PutBytes(tun.dials[*dstNodeID][0]) util.PutBytes(tun.dials[*dstNodeID][0])