From db910bdad72eb16f98df80aca26252cf80bf4a20 Mon Sep 17 00:00:00 2001 From: Christoph Rueger Date: Thu, 23 Jan 2025 19:05:19 +0100 Subject: [PATCH 1/3] fix SIC_THREADLOCAL_DEADLY_EMBRACE Bug: aQute.bnd.osgi.Processor$Bracket needs to be _static_ to avoid a deadly embrace with aQute.bnd.osgi.Processor.bracket This class is an inner class, but should probably be a static inner class. As it is, there is a serious danger of a deadly embrace between the inner class and the thread local in the outer class. Because the inner class isn't static, it retains a reference to the outer class. If the thread local contains a reference to an instance of the inner class, the inner and outer instance will both be reachable and not eligible for garbage collection. Signed-off-by: Christoph Rueger --- biz.aQute.bndlib/src/aQute/bnd/osgi/Processor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/biz.aQute.bndlib/src/aQute/bnd/osgi/Processor.java b/biz.aQute.bndlib/src/aQute/bnd/osgi/Processor.java index 2f5a0f03ab..9e5793195b 100644 --- a/biz.aQute.bndlib/src/aQute/bnd/osgi/Processor.java +++ b/biz.aQute.bndlib/src/aQute/bnd/osgi/Processor.java @@ -2671,7 +2671,7 @@ public boolean isPropertySet(Set keys) { return false; } - class Bracket { + static class Bracket { final List atEnds = new ArrayList<>(); final Map, Object> data = new HashMap<>(); From e4d5883f9e43b36b9fa3593aabf7a6cb0e7d2c8b Mon Sep 17 00:00:00 2001 From: Christoph Rueger Date: Thu, 23 Jan 2025 19:05:41 +0100 Subject: [PATCH 2/3] add missing return Signed-off-by: Christoph Rueger --- aQute.libg/src/aQute/libg/re/Catalog.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aQute.libg/src/aQute/libg/re/Catalog.java b/aQute.libg/src/aQute/libg/re/Catalog.java index 09eb6c036b..259629bdef 100644 --- a/aQute.libg/src/aQute/libg/re/Catalog.java +++ b/aQute.libg/src/aQute/libg/re/Catalog.java @@ -1160,7 +1160,7 @@ public Optional group(String name) { } String value = matcher.group(name); if (value == null) { - Optional.empty(); + return Optional.empty(); } return Optional.of(new MatchGroupImpl(name, value)); } From 031ed2480bb8a52013f554ca478f391476fca57d Mon Sep 17 00:00:00 2001 From: Christoph Rueger Date: Thu, 23 Jan 2025 19:06:22 +0100 Subject: [PATCH 3/3] fix dead store variables Signed-off-by: Christoph Rueger --- aQute.libg/src/aQute/libg/remote/sink/RemoteSink.java | 1 - biz.aQute.bndlib/src/aQute/bnd/build/model/EE.java | 1 - .../src/aQute/bnd/build/model/clauses/ImportPattern.java | 1 - .../src/aQute/bnd/osgi/resource/ResourceBuilder.java | 2 -- 4 files changed, 5 deletions(-) diff --git a/aQute.libg/src/aQute/libg/remote/sink/RemoteSink.java b/aQute.libg/src/aQute/libg/remote/sink/RemoteSink.java index 64d56263f1..8dd2e3f9d8 100644 --- a/aQute.libg/src/aQute/libg/remote/sink/RemoteSink.java +++ b/aQute.libg/src/aQute/libg/remote/sink/RemoteSink.java @@ -204,7 +204,6 @@ public Welcome getWelcome(int highest) { @Override public AreaImpl createArea(String areaId) throws Exception { - AreaImpl area = new AreaImpl(); if (areaId == null) { int n = 1000; while (!new File(areasDir, "" + n).isDirectory()) diff --git a/biz.aQute.bndlib/src/aQute/bnd/build/model/EE.java b/biz.aQute.bndlib/src/aQute/bnd/build/model/EE.java index 22ac534cfb..217b84961b 100644 --- a/biz.aQute.bndlib/src/aQute/bnd/build/model/EE.java +++ b/biz.aQute.bndlib/src/aQute/bnd/build/model/EE.java @@ -280,7 +280,6 @@ public static SortedSet getEEsFromRequirement(String requirement) { Parameters reqs = new Parameters(requirement); SortedSet result = new TreeSet<>(); FilterParser fp = new FilterParser(); - SortedSet all = all(); for (Map.Entry e : reqs.entrySet()) { Attrs attrs = reqs.get(ExecutionEnvironmentNamespace.EXECUTION_ENVIRONMENT_NAMESPACE); diff --git a/biz.aQute.bndlib/src/aQute/bnd/build/model/clauses/ImportPattern.java b/biz.aQute.bndlib/src/aQute/bnd/build/model/clauses/ImportPattern.java index c23f159f52..d34c25d478 100644 --- a/biz.aQute.bndlib/src/aQute/bnd/build/model/clauses/ImportPattern.java +++ b/biz.aQute.bndlib/src/aQute/bnd/build/model/clauses/ImportPattern.java @@ -28,7 +28,6 @@ public ImportPattern clone() { } public static ImportPattern error(String msg) { - Attrs a = new Attrs(); return new ImportPattern(msg, null); } diff --git a/biz.aQute.bndlib/src/aQute/bnd/osgi/resource/ResourceBuilder.java b/biz.aQute.bndlib/src/aQute/bnd/osgi/resource/ResourceBuilder.java index 07747f65ac..faf99345f1 100644 --- a/biz.aQute.bndlib/src/aQute/bnd/osgi/resource/ResourceBuilder.java +++ b/biz.aQute.bndlib/src/aQute/bnd/osgi/resource/ResourceBuilder.java @@ -14,7 +14,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -525,7 +524,6 @@ public RequirementBuilder getNativeCode(String header) { return null; boolean optional = false; - List options = new LinkedList<>(); RequirementBuilder rb = new RequirementBuilder(NativeNamespace.NATIVE_NAMESPACE); FilterBuilder sb = new FilterBuilder();