]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
device: remove selects from encrypt/decrypt/inbound/outbound enqueuing
authorJosh Bleecher Snyder <josh@tailscale.com>
Tue, 12 Jan 2021 01:21:16 +0000 (17:21 -0800)
committerJason A. Donenfeld <Jason@zx2c4.com>
Wed, 20 Jan 2021 18:57:00 +0000 (19:57 +0100)
Block instead. Backpressure here is fine, probably preferable.
This reduces code complexity.

Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
device/receive.go
device/send.go

index 20e0c8fae8d8779cecd2215eba8b0257032fc8a4..972b34204cfa48c314777e3179912b09d7bb45c8 100644 (file)
@@ -58,23 +58,6 @@ func (elem *QueueInboundElement) IsDropped() bool {
        return atomic.LoadInt32(&elem.dropped) == AtomicTrue
 }
 
-func (device *Device) addToInboundAndDecryptionQueues(inboundQueue chan *QueueInboundElement, decryptionQueue chan *QueueInboundElement, elem *QueueInboundElement) bool {
-       select {
-       case inboundQueue <- elem:
-               select {
-               case decryptionQueue <- elem:
-                       return true
-               default:
-                       elem.Drop()
-                       elem.Unlock()
-                       return false
-               }
-       default:
-               device.PutInboundElement(elem)
-               return false
-       }
-}
-
 func (device *Device) addToHandshakeQueue(queue chan QueueHandshakeElement, elem QueueHandshakeElement) bool {
        select {
        case queue <- elem:
@@ -207,9 +190,9 @@ func (device *Device) RoutineReceiveIncoming(IP int, bind conn.Bind) {
 
                        peer.queue.RLock()
                        if peer.isRunning.Get() {
-                               if device.addToInboundAndDecryptionQueues(peer.queue.inbound, device.queue.decryption.c, elem) {
-                                       buffer = device.GetMessageBuffer()
-                               }
+                               peer.queue.inbound <- elem
+                               device.queue.decryption.c <- elem
+                               buffer = device.GetMessageBuffer()
                        } else {
                                device.PutInboundElement(elem)
                        }
index 55df4b3a1984516d7c6e502c96a68b056b64c3bc..c9b62e6b378a81978506e6a23189dfddaac7a407 100644 (file)
@@ -97,23 +97,6 @@ func addToNonceQueue(queue chan *QueueOutboundElement, elem *QueueOutboundElemen
        }
 }
 
-func addToOutboundAndEncryptionQueues(outboundQueue chan *QueueOutboundElement, encryptionQueue chan *QueueOutboundElement, elem *QueueOutboundElement) {
-       select {
-       case outboundQueue <- elem:
-               select {
-               case encryptionQueue <- elem:
-                       return
-               default:
-                       elem.Drop()
-                       elem.peer.device.PutMessageBuffer(elem.buffer)
-                       elem.Unlock()
-               }
-       default:
-               elem.peer.device.PutMessageBuffer(elem.buffer)
-               elem.peer.device.PutOutboundElement(elem)
-       }
-}
-
 /* Queues a keepalive if no packets are queued for peer
  */
 func (peer *Peer) SendKeepalive() bool {
@@ -457,7 +440,8 @@ NextPacket:
                        elem.Lock()
 
                        // add to parallel and sequential queue
-                       addToOutboundAndEncryptionQueues(peer.queue.outbound, device.queue.encryption.c, elem)
+                       peer.queue.outbound <- elem
+                       device.queue.encryption.c <- elem
                }
        }
 }