From c5bbd3c31855d99931dd274894443010ab54a8ce Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Thu, 16 Oct 2014 17:56:12 +0900 Subject: [PATCH] Fix resource leak in DnsNameResolver --- .../java/io/netty/resolver/dns/DnsNameResolver.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/resolver-dns/src/main/java/io/netty/resolver/dns/DnsNameResolver.java b/resolver-dns/src/main/java/io/netty/resolver/dns/DnsNameResolver.java index 42902164cf..f1f5a1eb82 100644 --- a/resolver-dns/src/main/java/io/netty/resolver/dns/DnsNameResolver.java +++ b/resolver-dns/src/main/java/io/netty/resolver/dns/DnsNameResolver.java @@ -751,7 +751,6 @@ public class DnsNameResolver extends SimpleNameResolver { private final class DnsResponseHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { - boolean success = false; try { final DnsResponse res = (DnsResponse) msg; final int queryId = res.header().id(); @@ -790,8 +789,7 @@ public class DnsNameResolver extends SimpleNameResolver { if (res.header().responseCode() == DnsResponseCode.NOERROR) { cache(q, res); promises.set(queryId, null); - qCtx.promise().trySuccess(res); - success = true; + qCtx.promise().trySuccess(res.retain()); } else { qCtx.retry(res.sender(), "response code: " + res.header().responseCode() + @@ -799,9 +797,7 @@ public class DnsNameResolver extends SimpleNameResolver { res.authorityResources().size() + " authority resource(s)"); } } finally { - if (!success) { - ReferenceCountUtil.safeRelease(msg); - } + ReferenceCountUtil.safeRelease(msg); } } @@ -823,8 +819,6 @@ public class DnsNameResolver extends SimpleNameResolver { // Ensure that the found TTL is between minTtl and maxTtl. ttl = Math.max(minTtl(), Math.min(maxTtl, ttl)); - res.retain(); - DnsNameResolver.this.cache(question, new DnsCacheEntry(res), ttl); } @@ -840,7 +834,7 @@ public class DnsNameResolver extends SimpleNameResolver { volatile ScheduledFuture expirationFuture; DnsCacheEntry(DnsResponse response) { - this.response = response; + this.response = response.retain(); cause = null; }