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; }