From: Josh Bleecher Snyder Date: Tue, 22 Dec 2020 17:52:53 +0000 (-0800) Subject: device: remove QueueInboundElement leak with stopped peers X-Git-Tag: 0.0.20210212~114 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b5f966ac2439df9eba182886406f6381934948ad;p=thirdparty%2Fwireguard-go.git 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 --- 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()