better way to empty ipv6rwc buffer

This commit is contained in:
Arceliar 2021-09-23 04:39:12 -05:00
parent 86e5306eec
commit e5d638ff4b

View File

@ -129,10 +129,10 @@ func (k *keyStore) sendToSubnet(subnet address.Subnet, bs []byte) {
func (k *keyStore) update(key ed25519.PublicKey) *keyInfo { func (k *keyStore) update(key ed25519.PublicKey) *keyInfo {
k.mutex.Lock() k.mutex.Lock()
defer k.mutex.Unlock()
var kArray keyArray var kArray keyArray
copy(kArray[:], key) copy(kArray[:], key)
var info *keyInfo var info *keyInfo
var packets [][]byte
if info = k.keyToInfo[kArray]; info == nil { if info = k.keyToInfo[kArray]; info == nil {
info = new(keyInfo) info = new(keyInfo)
info.key = kArray info.key = kArray
@ -142,15 +142,19 @@ func (k *keyStore) update(key ed25519.PublicKey) *keyInfo {
k.addrToInfo[info.address] = info k.addrToInfo[info.address] = info
k.subnetToInfo[info.subnet] = info k.subnetToInfo[info.subnet] = info
if buf := k.addrBuffer[info.address]; buf != nil { if buf := k.addrBuffer[info.address]; buf != nil {
k.core.WriteTo(buf.packet, iwt.Addr(info.key[:])) packets = append(packets, buf.packet)
delete(k.addrBuffer, info.address) delete(k.addrBuffer, info.address)
} }
if buf := k.subnetBuffer[info.subnet]; buf != nil { if buf := k.subnetBuffer[info.subnet]; buf != nil {
k.core.WriteTo(buf.packet, iwt.Addr(info.key[:])) packets = append(packets, buf.packet)
delete(k.subnetBuffer, info.subnet) delete(k.subnetBuffer, info.subnet)
} }
} }
k.resetTimeout(info) k.resetTimeout(info)
k.mutex.Unlock()
for _, packet := range packets {
k.core.WriteTo(packet, iwt.Addr(info.key[:]))
}
return info return info
} }