From c6c0984b8ec4b4c3e560cdd63a7ee3e20fec96b5 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Mon, 19 Feb 2018 20:18:14 +0100 Subject: [PATCH] Ensure we always release the AddressEnvelope when doing DNS queries. Motivation: When we do DNS queries we need to ensure we always release the AddressEnvelope. Modifications: Also release the AddressEnvelope if the original resolution was done in the meantime and we did not cancel the extra query yet. Result: Should fix [#7713] --- .../java/io/netty/resolver/dns/DnsNameResolverContext.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/resolver-dns/src/main/java/io/netty/resolver/dns/DnsNameResolverContext.java b/resolver-dns/src/main/java/io/netty/resolver/dns/DnsNameResolverContext.java index 7c215b1199..2eea34536e 100644 --- a/resolver-dns/src/main/java/io/netty/resolver/dns/DnsNameResolverContext.java +++ b/resolver-dns/src/main/java/io/netty/resolver/dns/DnsNameResolverContext.java @@ -325,6 +325,13 @@ abstract class DnsNameResolverContext { if (promise.isDone() || future.isCancelled()) { queryLifecycleObserver.queryCancelled(allowedQueries); + + // Check if we need to release the envelope itself. If the query was cancelled the getNow() will + // return null as well as the Future will be failed with a CancellationException. + AddressedEnvelope result = future.getNow(); + if (result != null) { + result.release(); + } return; }