Catch and ignore IAEs due to harmless check-then-act situation. (FELIX-3939)
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1451284 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/BundleWiringImpl.java b/framework/src/main/java/org/apache/felix/framework/BundleWiringImpl.java
index 485e4ab..47c3e95 100644
--- a/framework/src/main/java/org/apache/felix/framework/BundleWiringImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/BundleWiringImpl.java
@@ -2185,7 +2185,12 @@
if (getPackage(pkgName) == null)
{
Object[] params = definePackage(pkgName);
- if (params != null)
+
+ // This is a harmless check-then-act situation,
+ // where threads might be racing to create different
+ // classes in the same package, so catch and ignore
+ // any IAEs that may occur.
+ try
{
definePackage(
pkgName,
@@ -2197,10 +2202,9 @@
(String) params[5],
null);
}
- else
+ catch (IllegalArgumentException ex)
{
- definePackage(pkgName, null, null,
- null, null, null, null, null);
+ // Ignore.
}
}
}
@@ -2315,7 +2319,7 @@
spectitle, specversion, specvendor, impltitle, implversion, implvendor
};
}
- return null;
+ return new Object[] {null, null, null, null, null, null};
}
private Class getDexFileClass(JarContent content, String name, ClassLoader loader)