From 2fe19ce54db258d8c47ff03d8335fd28c7c7ad0f Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Mon, 11 Jan 2021 17:21:16 -0800 Subject: [PATCH] device: remove selects from encrypt/decrypt/inbound/outbound enqueuing Block instead. Backpressure here is fine, probably preferable. This reduces code complexity. Signed-off-by: Josh Bleecher Snyder --- device/receive.go | 23 +++-------------------- device/send.go | 20 ++------------------ 2 files changed, 5 insertions(+), 38 deletions(-) diff --git a/device/receive.go b/device/receive.go index 20e0c8f..972b342 100644 --- a/device/receive.go +++ b/device/receive.go @@ -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) } diff --git a/device/send.go b/device/send.go index 55df4b3..c9b62e6 100644 --- a/device/send.go +++ b/device/send.go @@ -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 } } }