You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pa...@apache.org on 2020/01/28 12:15:06 UTC
svn commit: r1873245 - in
/felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework:
BundleWiringImpl.java util/SecureAction.java
Author: pauls
Date: Tue Jan 28 12:15:06 2020
New Revision: 1873245
URL: http://svn.apache.org/viewvc?rev=1873245&view=rev
Log:
Rework unsave usage to be triggered by static init
Modified:
felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleWiringImpl.java
felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/util/SecureAction.java
Modified: felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleWiringImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleWiringImpl.java?rev=1873245&r1=1873244&r2=1873245&view=diff
==============================================================================
--- felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleWiringImpl.java (original)
+++ felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleWiringImpl.java Tue Jan 28 12:15:06 2020
@@ -1533,24 +1533,21 @@ public class BundleWiringImpl implements
try
{
- result = tryImplicitBootDelegation(name, isClass);
- }
- catch (Exception ex)
- {
- // Ignore, will throw using CNFE_CLASS_LOADER
- }
+ // Get the appropriate class loader for delegation.
+ ClassLoader bdcl = getBootDelegationClassLoader();
+ result = (isClass) ? (Object) bdcl.loadClass(name) : (Object) bdcl.getResource(name);
- if (result != null)
- {
- m_accessorLookupCache.put(name, BundleRevisionImpl.getSecureAction()
- .getClassLoader(this.getClass()));
- return result;
+ if (result != null)
+ {
+ m_accessorLookupCache.put(name, bdcl);
+ return result;
+ }
}
- else
+ catch (ClassNotFoundException ex)
{
- m_accessorLookupCache.put(name, CNFE_CLASS_LOADER);
- CNFE_CLASS_LOADER.loadClass(name);
}
+ m_accessorLookupCache.put(name, CNFE_CLASS_LOADER);
+ CNFE_CLASS_LOADER.loadClass(name);
}
// Look in the revision's imports. Note that the search may
Modified: felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/util/SecureAction.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/util/SecureAction.java?rev=1873245&r1=1873244&r2=1873245&view=diff
==============================================================================
--- felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/util/SecureAction.java (original)
+++ felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/util/SecureAction.java Tue Jan 28 12:15:06 2020
@@ -81,6 +81,7 @@ public class SecureAction
result = new byte[0];
}
accessor = result;
+ getAccessor(URL.class);
}
private static final ThreadLocal m_actions = new ThreadLocal()
@@ -1012,14 +1013,14 @@ public class SecureAction
}
}
- private static ConcurrentHashMap<Class, Object> m_accessorCache = new ConcurrentHashMap<>();
+ private static volatile Consumer<AccessibleObject[]> m_accessorCache = null;
@SuppressWarnings("unchecked")
private static Consumer<AccessibleObject[]> getAccessor(Class clazz) {
String packageName = clazz.getPackage().getName();
if ("java.net".equals(packageName) || "jdk.internal.loader".equals(packageName))
{
- return (Consumer<AccessibleObject[]>) m_accessorCache.computeIfAbsent(clazz, target ->
+ if (m_accessorCache == null)
{
try
{
@@ -1035,16 +1036,17 @@ public class SecureAction
Class<Consumer<AccessibleObject[]>> result =
(Class<Consumer<AccessibleObject[]>>)
- defineAnonymousClass.invoke(unsafe, packageName.equals("java.net") ? clazz : URL.class, accessor , null);
- return result.getConstructor().newInstance();
+ defineAnonymousClass.invoke(unsafe, URL.class, accessor , null);
+ m_accessorCache = result.getConstructor().newInstance();
}
catch (Throwable t)
{
t.printStackTrace();
- return (Consumer<AccessibleObject[]>) objects -> AccessibleObject.setAccessible(objects, true);
+ m_accessorCache = objects -> AccessibleObject.setAccessible(objects, true);
}
- });
+ }
+ return m_accessorCache;
}
else {
return objects -> AccessibleObject.setAccessible(objects, true);