From 79c773c541ad351b3ee56b835e4ac25f37e3a437 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Tue, 13 Jun 2023 15:58:36 +0200 Subject: [PATCH] Release DnsRecords when failing to notify promise (#13437) Motivation: We need to release the DnsRecords if we didnt transfer ownership to prevent leaks. Modifications: Release DnsRecords when trySuccess(...) returns false Result: Correctly release reference counted resources --- .../main/java/io/netty/resolver/dns/DnsNameResolver.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 df87bffb34b..38da019ded6 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 @@ -52,6 +52,7 @@ import io.netty.resolver.InetNameResolver; import io.netty.resolver.ResolvedAddressTypes; import io.netty.util.NetUtil; +import io.netty.util.ReferenceCountUtil; import io.netty.util.concurrent.EventExecutor; import io.netty.util.concurrent.FastThreadLocal; import io.netty.util.concurrent.Future; @@ -905,7 +906,12 @@ private Future> resolveAll(DnsQuestion question, DnsRecord[] add } if (!result.isEmpty()) { - trySuccess(promise, result); + if (!trySuccess(promise, result)) { + // We were not able to transfer ownership, release the records to prevent leaks. + for (DnsRecord r: result) { + ReferenceCountUtil.safeRelease(r); + } + } return promise; } }