]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
device: do atomic 64-bit add outside of vector loop
authorJason A. Donenfeld <Jason@zx2c4.com>
Mon, 11 Dec 2023 15:35:57 +0000 (16:35 +0100)
committerJason A. Donenfeld <Jason@zx2c4.com>
Mon, 11 Dec 2023 15:35:57 +0000 (16:35 +0100)
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>
device/receive.go

index 98e2024dcba44020d146f22d66d57fe4babe26e0..1ab3e2945d936aead54fdd35a9d65eb5f16e17d0 100644 (file)
@@ -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()