Fixup buffer freeing
This commit is contained in:
parent
942abf948a
commit
cf81a28dd3
@ -19,8 +19,7 @@ const (
|
|||||||
DeviceRoutineNumberAdditional = 2
|
DeviceRoutineNumberAdditional = 2
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var preallocatedBuffers = 0
|
||||||
const preallocatedBuffers = 0
|
|
||||||
|
|
||||||
type Device struct {
|
type Device struct {
|
||||||
isUp AtomicBool // device is (going) up
|
isUp AtomicBool // device is (going) up
|
||||||
|
23
receive.go
23
receive.go
@ -279,6 +279,7 @@ func (device *Device) RoutineDecryption() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
elem.Drop()
|
elem.Drop()
|
||||||
device.PutMessageBuffer(elem.buffer)
|
device.PutMessageBuffer(elem.buffer)
|
||||||
|
elem.buffer = nil
|
||||||
elem.mutex.Unlock()
|
elem.mutex.Unlock()
|
||||||
}
|
}
|
||||||
elem.mutex.Unlock()
|
elem.mutex.Unlock()
|
||||||
@ -294,18 +295,25 @@ func (device *Device) RoutineHandshake() {
|
|||||||
logError := device.log.Error
|
logError := device.log.Error
|
||||||
logDebug := device.log.Debug
|
logDebug := device.log.Debug
|
||||||
|
|
||||||
|
var elem QueueHandshakeElement
|
||||||
|
var ok bool
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
logDebug.Println("Routine: handshake worker - stopped")
|
logDebug.Println("Routine: handshake worker - stopped")
|
||||||
device.state.stopping.Done()
|
device.state.stopping.Done()
|
||||||
|
if elem.buffer != nil {
|
||||||
|
device.PutMessageBuffer(elem.buffer)
|
||||||
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
logDebug.Println("Routine: handshake worker - started")
|
logDebug.Println("Routine: handshake worker - started")
|
||||||
device.state.starting.Done()
|
device.state.starting.Done()
|
||||||
|
|
||||||
var elem QueueHandshakeElement
|
|
||||||
var ok bool
|
|
||||||
|
|
||||||
for {
|
for {
|
||||||
|
if elem.buffer != nil {
|
||||||
|
device.PutMessageBuffer(elem.buffer)
|
||||||
|
}
|
||||||
|
|
||||||
select {
|
select {
|
||||||
case elem, ok = <-device.queue.handshake:
|
case elem, ok = <-device.queue.handshake:
|
||||||
case <-device.signals.stop:
|
case <-device.signals.stop:
|
||||||
@ -478,9 +486,14 @@ func (peer *Peer) RoutineSequentialReceiver() {
|
|||||||
logError := device.log.Error
|
logError := device.log.Error
|
||||||
logDebug := device.log.Debug
|
logDebug := device.log.Debug
|
||||||
|
|
||||||
|
var elem *QueueInboundElement
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
logDebug.Println(peer, "- Routine: sequential receiver - stopped")
|
logDebug.Println(peer, "- Routine: sequential receiver - stopped")
|
||||||
peer.routines.stopping.Done()
|
peer.routines.stopping.Done()
|
||||||
|
if elem != nil && elem.buffer != nil {
|
||||||
|
device.PutMessageBuffer(elem.buffer)
|
||||||
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
logDebug.Println(peer, "- Routine: sequential receiver - started")
|
logDebug.Println(peer, "- Routine: sequential receiver - started")
|
||||||
@ -488,6 +501,9 @@ func (peer *Peer) RoutineSequentialReceiver() {
|
|||||||
peer.routines.starting.Done()
|
peer.routines.starting.Done()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
|
if elem != nil && elem.buffer != nil {
|
||||||
|
device.PutMessageBuffer(elem.buffer)
|
||||||
|
}
|
||||||
|
|
||||||
select {
|
select {
|
||||||
|
|
||||||
@ -608,7 +624,6 @@ func (peer *Peer) RoutineSequentialReceiver() {
|
|||||||
_, err := device.tun.device.Write(
|
_, err := device.tun.device.Write(
|
||||||
elem.buffer[:offset+len(elem.packet)],
|
elem.buffer[:offset+len(elem.packet)],
|
||||||
offset)
|
offset)
|
||||||
device.PutMessageBuffer(elem.buffer)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logError.Println("Failed to write packet to TUN device:", err)
|
logError.Println("Failed to write packet to TUN device:", err)
|
||||||
}
|
}
|
||||||
|
4
send.go
4
send.go
@ -74,8 +74,7 @@ func addToNonceQueue(queue chan *QueueOutboundElement, element *QueueOutboundEle
|
|||||||
default:
|
default:
|
||||||
select {
|
select {
|
||||||
case old := <-queue:
|
case old := <-queue:
|
||||||
old.Drop()
|
device.PutMessageBuffer(old.buffer)
|
||||||
device.PutMessageBuffer(element.buffer)
|
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -98,7 +97,6 @@ func addToOutboundAndEncryptionQueues(outboundQueue chan *QueueOutboundElement,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Queues a keepalive if no packets are queued for peer
|
/* Queues a keepalive if no packets are queued for peer
|
||||||
*/
|
*/
|
||||||
func (peer *Peer) SendKeepalive() bool {
|
func (peer *Peer) SendKeepalive() bool {
|
||||||
|
Loading…
Reference in New Issue
Block a user