Skip to content

Commit 2b55512

Browse files
zx2c4jwhited
authored andcommitted
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. cherry picked from commit WireGuard/wireguard-go@542e565 Updates tailscale/corp#28879 Signed-off-by: Jason A. Donenfeld <[email protected]>
1 parent 6413b49 commit 2b55512

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

device/receive.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,7 @@ func (peer *Peer) RoutineSequentialReceiver(maxBatchSize int) {
447447
elemsContainer.Lock()
448448
validTailPacket := -1
449449
dataPacketReceived := false
450+
rxBytesLen := uint64(0)
450451
for i, elem := range elemsContainer.elems {
451452
if elem.packet == nil {
452453
// decryption failed
@@ -463,7 +464,7 @@ func (peer *Peer) RoutineSequentialReceiver(maxBatchSize int) {
463464
peer.timersHandshakeComplete()
464465
peer.SendStagedPackets()
465466
}
466-
peer.rxBytes.Add(uint64(len(elem.packet) + MinMessageSize))
467+
rxBytesLen += uint64(len(elem.packet) + MinMessageSize)
467468

468469
if len(elem.packet) == 0 {
469470
device.log.Verbosef("%v - Receiving keepalive packet", peer)
@@ -512,6 +513,8 @@ func (peer *Peer) RoutineSequentialReceiver(maxBatchSize int) {
512513

513514
bufs = append(bufs, elem.buffer[:MessageTransportOffsetContent+len(elem.packet)])
514515
}
516+
517+
peer.rxBytes.Add(rxBytesLen)
515518
if validTailPacket >= 0 {
516519
peer.SetEndpointFromPacket(elemsContainer.elems[validTailPacket].endpoint)
517520
peer.keepKeyFreshReceiving()

0 commit comments

Comments
 (0)