diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-09-17 00:43:23 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-09-22 05:43:03 +0200 |
commit | cf81a28dd30bd8714432d2ff108d64c7f4b65e50 (patch) | |
tree | f2b2c502c22ad6b3d006c289f28fd897f4c703a5 /receive.go | |
parent | 942abf948a9121a4595f782093ca623534997776 (diff) |
Fixup buffer freeing
Diffstat (limited to 'receive.go')
-rw-r--r-- | receive.go | 23 |
1 files changed, 19 insertions, 4 deletions
@@ -279,6 +279,7 @@ func (device *Device) RoutineDecryption() { if err != nil { elem.Drop() device.PutMessageBuffer(elem.buffer) + elem.buffer = nil elem.mutex.Unlock() } elem.mutex.Unlock() @@ -294,18 +295,25 @@ func (device *Device) RoutineHandshake() { logError := device.log.Error logDebug := device.log.Debug + var elem QueueHandshakeElement + var ok bool + defer func() { logDebug.Println("Routine: handshake worker - stopped") device.state.stopping.Done() + if elem.buffer != nil { + device.PutMessageBuffer(elem.buffer) + } }() logDebug.Println("Routine: handshake worker - started") device.state.starting.Done() - var elem QueueHandshakeElement - var ok bool - for { + if elem.buffer != nil { + device.PutMessageBuffer(elem.buffer) + } + select { case elem, ok = <-device.queue.handshake: case <-device.signals.stop: @@ -478,9 +486,14 @@ func (peer *Peer) RoutineSequentialReceiver() { logError := device.log.Error logDebug := device.log.Debug + var elem *QueueInboundElement + defer func() { logDebug.Println(peer, "- Routine: sequential receiver - stopped") peer.routines.stopping.Done() + if elem != nil && elem.buffer != nil { + device.PutMessageBuffer(elem.buffer) + } }() logDebug.Println(peer, "- Routine: sequential receiver - started") @@ -488,6 +501,9 @@ func (peer *Peer) RoutineSequentialReceiver() { peer.routines.starting.Done() for { + if elem != nil && elem.buffer != nil { + device.PutMessageBuffer(elem.buffer) + } select { @@ -608,7 +624,6 @@ func (peer *Peer) RoutineSequentialReceiver() { _, err := device.tun.device.Write( elem.buffer[:offset+len(elem.packet)], offset) - device.PutMessageBuffer(elem.buffer) if err != nil { logError.Println("Failed to write packet to TUN device:", err) } |