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)