Need to double-check wires for dynamic imports because it is possible
that threads can race to concurrently create dynamically imported wires.
This ensures that the second thread will see the wire created by the
first thread. (FELIX-1027)


git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@767850 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/Felix.java b/framework/src/main/java/org/apache/felix/framework/Felix.java
index fd0a5a0..ccd86de 100644
--- a/framework/src/main/java/org/apache/felix/framework/Felix.java
+++ b/framework/src/main/java/org/apache/felix/framework/Felix.java
@@ -3716,6 +3716,19 @@
 
                 try
                 {
+                    // Double check to make sure that someone hasn't beaten us to
+                    // dynamically importing the package, which can happen if two
+                    // threads are racing to do so. If we have an existing wire,
+                    // then just return it instead.
+                    IWire[] wires = importer.getWires();
+                    for (int i = 0; (wires != null) && (i < wires.length); i++)
+                    {
+                        if (wires[i].hasPackage(pkgName))
+                        {
+                            return wires[i];
+                        }
+                    }
+
                     Object[] result = m_resolver.resolveDynamicImport(m_resolverState, importer, pkgName);
                     if (result != null)
                     {
@@ -3728,7 +3741,7 @@
                         // Dynamically add new wire to importing module.
                         if (candidateWire != null)
                         {
-                            IWire[] wires = importer.getWires();
+                            wires = importer.getWires();
                             IWire[] newWires = null;
                             if (wires == null)
                             {