if err != nil {
elem.Drop()
device.PutMessageBuffer(elem.buffer)
+ elem.buffer = nil
elem.mutex.Unlock()
}
elem.mutex.Unlock()
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:
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")
peer.routines.starting.Done()
for {
+ if elem != nil && elem.buffer != nil {
+ device.PutMessageBuffer(elem.buffer)
+ }
select {
_, 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)
}