summaryrefslogtreecommitdiffstats
path: root/device/receive.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2021-02-09 15:09:50 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2021-02-09 15:37:04 +0100
commit6ac1240821207c90708ac205f4f98eb8b82f3ee5 (patch)
tree1331654d522170b1942bfcd1741bcc3b6fb40672 /device/receive.go
parentdevice: lock elem in autodraining queue before freeing (diff)
downloadwireguard-go-6ac1240821207c90708ac205f4f98eb8b82f3ee5.tar.xz
wireguard-go-6ac1240821207c90708ac205f4f98eb8b82f3ee5.zip
device: do not attach finalizer to non-returned object
Before, the code attached a finalizer to an object that wasn't returned, resulting in immediate garbage collection. Instead return the actual pointer. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'device/receive.go')
-rw-r--r--device/receive.go6
1 files changed, 3 insertions, 3 deletions
diff --git a/device/receive.go b/device/receive.go
index 7acb7d9..3fc6831 100644
--- a/device/receive.go
+++ b/device/receive.go
@@ -167,7 +167,7 @@ func (device *Device) RoutineReceiveIncoming(IP int, bind conn.Bind) {
// add to decryption queues
if peer.isRunning.Get() {
- peer.queue.inbound <- elem
+ peer.queue.inbound.c <- elem
device.queue.decryption.c <- elem
buffer = device.GetMessageBuffer()
} else {
@@ -402,7 +402,7 @@ func (peer *Peer) RoutineSequentialReceiver() {
}()
device.log.Verbosef("%v - Routine: sequential receiver - started", peer)
- for elem := range peer.queue.inbound {
+ for elem := range peer.queue.inbound.c {
if elem == nil {
return
}
@@ -477,7 +477,7 @@ func (peer *Peer) RoutineSequentialReceiver() {
if err != nil && !device.isClosed() {
device.log.Errorf("Failed to write packet to TUN device: %v", err)
}
- if len(peer.queue.inbound) == 0 {
+ if len(peer.queue.inbound.c) == 0 {
err = device.tun.device.Flush()
if err != nil {
peer.device.log.Errorf("Unable to flush packets: %v", err)