Skip to content

Commit

Permalink
Fixed resource cleaning - based on tests
Browse files Browse the repository at this point in the history
- Reproducer: anything using Arquillian (Concurrency TCK, Servlet TCK) plus
  hardcoded clearReferencesStatic set to true.
- Excluded enums
- setAccessible must be called for each getDeclaredFields

Signed-off-by: David Matějček <david.matejcek@omnifish.ee>
  • Loading branch information
dmatej committed Jan 15, 2023
1 parent 92f734e commit de22c73
Showing 1 changed file with 3 additions and 7 deletions.
Expand Up @@ -292,6 +292,7 @@ private void clearReferencesStaticFinal(Collection<ResourceEntry> resourceEntrie
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (Modifier.isStatic(field.getModifiers())) {
setAccessible(field);
field.get(null);
break;
}
Expand All @@ -312,7 +313,7 @@ private void clearReferencesStaticFinal(Collection<ResourceEntry> resourceEntrie
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
int mods = field.getModifiers();
if (field.getType().isPrimitive() || (field.getName().indexOf("$") != -1)) {
if (field.isEnumConstant() || field.getType().isPrimitive() || field.getName().indexOf('$') != -1) {
continue;
}
if (Modifier.isStatic(mods)) {
Expand Down Expand Up @@ -384,22 +385,17 @@ private void nullInstance(Object instance) {
continue;
}
try {
setAccessible(field);
if (Modifier.isStatic(mods) && Modifier.isFinal(mods)) {
// Doing something recursively is too risky
continue;
}
setAccessible(field);
Object value = field.get(instance);
if (value != null) {
Class<? extends Object> valueClass = value.getClass();
if (isLeaked(valueClass)) {
field.set(instance, null);
LOG.log(TRACE, "Set field {0}, to null in {1}", field.getName(), instance.getClass());
} else {
LOG.log(TRACE,
"Not setting field {0} to null in object of {1} because"
+ " the referenced object was of {2} which was not loaded by {3}.",
field.getName(), instance.getClass(), valueClass, loader);
}
}
} catch (Exception t) {
Expand Down

0 comments on commit de22c73

Please sign in to comment.