OpenJDK / jdk / jdk
changeset 59757:1242c6a84642
8247247: JFR tests fail due to JDK-8235521 missing doPrivileged block
Reviewed-by: egahlin
author | mchung |
---|---|
date | Thu, 11 Jun 2020 11:07:09 -0700 |
parents | 93813843680b |
children | 7dfe001cbb1e |
files | src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java src/jdk.jfr/share/classes/jdk/jfr/internal/SecuritySupport.java |
diffstat | 2 files changed, 21 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java Thu Jun 11 15:47:36 2020 +0000 +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java Thu Jun 11 11:07:09 2020 -0700 @@ -109,7 +109,7 @@ } public synchronized EventType getEventType(Class<? extends jdk.internal.event.Event> eventClass) { - EventHandler h = getHandler(eventClass); + EventHandler h = getHandler(eventClass, false); if (h != null && h.isRegistered()) { return h.getEventType(); } @@ -118,7 +118,7 @@ public synchronized void unregister(Class<? extends Event> eventClass) { Utils.checkRegisterPermission(); - EventHandler handler = getHandler(eventClass); + EventHandler handler = getHandler(eventClass, false); if (handler != null) { handler.setRegistered(false); } @@ -130,7 +130,7 @@ public synchronized EventType register(Class<? extends jdk.internal.event.Event> eventClass, List<AnnotationElement> dynamicAnnotations, List<ValueDescriptor> dynamicFields) { Utils.checkRegisterPermission(); - EventHandler handler = getHandler(eventClass); + EventHandler handler = getHandler(eventClass, true); if (handler == null) { if (eventClass.getAnnotation(MirrorEvent.class) != null) { // don't register mirrors @@ -165,10 +165,12 @@ return et; } - private EventHandler getHandler(Class<? extends jdk.internal.event.Event> eventClass) { + private EventHandler getHandler(Class<? extends jdk.internal.event.Event> eventClass, boolean ensureInitialized) { Utils.ensureValidEventSubclass(eventClass); SecuritySupport.makeVisibleToJFR(eventClass); - Utils.ensureInitialized(eventClass); + if (ensureInitialized) { + Utils.ensureInitialized(eventClass); + } return Utils.getHandler(eventClass); }
--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/SecuritySupport.java Thu Jun 11 15:47:36 2020 +0000 +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/SecuritySupport.java Thu Jun 11 11:07:09 2020 -0700 @@ -432,9 +432,22 @@ static void ensureClassIsInitialized(Class<?> clazz) { try { - MethodHandles.privateLookupIn(clazz, LOOKUP).ensureInitialized(clazz); + MethodHandles.Lookup lookup; + if (System.getSecurityManager() == null) { + lookup = MethodHandles.privateLookupIn(clazz, LOOKUP); + } else { + lookup = AccessController.doPrivileged(new PrivilegedExceptionAction<>() { + @Override + public MethodHandles.Lookup run() throws IllegalAccessException { + return MethodHandles.privateLookupIn(clazz, LOOKUP); + } + }, null, new ReflectPermission("suppressAccessChecks")); + } + lookup.ensureInitialized(clazz); } catch (IllegalAccessException e) { throw new InternalError(e); + } catch (PrivilegedActionException e) { + throw new InternalError(e.getCause()); } }