aboutsummaryrefslogtreecommitdiffstats
path: root/device/receive.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2023-12-11 16:35:57 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2023-12-11 16:35:57 +0100
commit542e565baa776ed4c5c55b73ef9aa38d33d55197 (patch)
tree58c5ab624d1174ae333104d9e9e81b408ed4e119 /device/receive.go
parentdevice: reduce redundant per-packet overhead in RX path (diff)
downloadwireguard-go-542e565baa776ed4c5c55b73ef9aa38d33d55197.tar.xz
wireguard-go-542e565baa776ed4c5c55b73ef9aa38d33d55197.zip
device: do atomic 64-bit add outside of vector loop
Only bother updating the rxBytes counter once we've processed a whole vector, since additions are atomic. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to '')
-rw-r--r--device/receive.go5
1 files changed, 4 insertions, 1 deletions
diff --git a/device/receive.go b/device/receive.go
index 98e2024..1ab3e29 100644
--- a/device/receive.go
+++ b/device/receive.go
@@ -447,6 +447,7 @@ func (peer *Peer) RoutineSequentialReceiver(maxBatchSize int) {
elemsContainer.Lock()
validTailPacket := -1
dataPacketReceived := false
+ rxBytesLen := uint64(0)
for i, elem := range elemsContainer.elems {
if elem.packet == nil {
// decryption failed
@@ -463,7 +464,7 @@ func (peer *Peer) RoutineSequentialReceiver(maxBatchSize int) {
peer.timersHandshakeComplete()
peer.SendStagedPackets()
}
- peer.rxBytes.Add(uint64(len(elem.packet) + MinMessageSize))
+ rxBytesLen += uint64(len(elem.packet) + MinMessageSize)
if len(elem.packet) == 0 {
device.log.Verbosef("%v - Receiving keepalive packet", peer)
@@ -512,6 +513,8 @@ func (peer *Peer) RoutineSequentialReceiver(maxBatchSize int) {
bufs = append(bufs, elem.buffer[:MessageTransportOffsetContent+len(elem.packet)])
}
+
+ peer.rxBytes.Add(rxBytesLen)
if validTailPacket >= 0 {
peer.SetEndpointFromPacket(elemsContainer.elems[validTailPacket].endpoint)
peer.keepKeyFreshReceiving()