From b5f966ac2439df9eba182886406f6381934948ad Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Tue, 22 Dec 2020 09:52:53 -0800 Subject: device: remove QueueInboundElement leak with stopped peers This is particularly problematic on mobile, where there is a fixed number of elements. If most of them leak, it'll impact performance; if all of them leak, the device will permanently deadlock. I have a test that detects element leaks, which is how I found this one. There are some remaining leaks that I have not yet tracked down, but this is the most prominent by far. I will commit the test when it passes reliably. Signed-off-by: Josh Bleecher Snyder --- device/receive.go | 2 ++ 1 file changed, 2 insertions(+) (limited to 'device/receive.go') diff --git a/device/receive.go b/device/receive.go index e9cf2bc..4b6f278 100644 --- a/device/receive.go +++ b/device/receive.go @@ -199,6 +199,8 @@ func (device *Device) RoutineReceiveIncoming(IP int, bind conn.Bind) { if device.addToInboundAndDecryptionQueues(peer.queue.inbound, device.queue.decryption, elem) { buffer = device.GetMessageBuffer() } + } else { + device.PutInboundElement(elem) } peer.queue.RUnlock() -- cgit v1.2.3-59-g8ed1b