5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-11-22 20:00:27 +00:00

correctly update buffer sizs when buffers overflow, and returned freed packets to the byte store

This commit is contained in:
Arceliar 2018-07-06 17:27:04 -05:00
parent ad5dc9ea87
commit ba4047b51a

View File

@ -631,8 +631,12 @@ func (b *switch_buffers) cleanup(t *switchTable) {
packet, buf.packets = buf.packets[0], buf.packets[1:] packet, buf.packets = buf.packets[0], buf.packets[1:]
buf.size -= uint64(len(packet.bytes)) buf.size -= uint64(len(packet.bytes))
b.size -= uint64(len(packet.bytes)) b.size -= uint64(len(packet.bytes))
util_putBytes(packet.bytes)
if len(buf.packets) == 0 { if len(buf.packets) == 0 {
delete(b.bufs, streamID) delete(b.bufs, streamID)
} else {
// Need to update the map, since buf was retrieved by value
b.bufs[streamID] = buf
} }
break break
} }
@ -672,6 +676,7 @@ func (t *switchTable) handleIdle(port switchPort, bufs *switch_buffers) bool {
if len(buf.packets) == 0 { if len(buf.packets) == 0 {
delete(bufs.bufs, best) delete(bufs.bufs, best)
} else { } else {
// Need to update the map, since buf was retrieved by value
bufs.bufs[best] = buf bufs.bufs[best] = buf
} }
to.sendPacket(packet.bytes) to.sendPacket(packet.bytes)