8214287: SpecJbb2005StressModule got uncaught exception

Reviewed-by: egahlin, jwilhelm
This commit is contained in:
Markus Grönlund 2018-11-27 18:14:27 +01:00
parent 10da56f017
commit ba809c2c36
3 changed files with 24 additions and 7 deletions
src/jdk.jfr/share/classes/jdk/jfr/internal

@ -435,6 +435,10 @@ public final class EventInstrumentation {
// MyEvent#shouldCommit()
updateMethod(METHOD_EVENT_SHOULD_COMMIT, methodVisitor -> {
Label fail = new Label();
if (guardHandlerReference) {
getEventHandler(methodVisitor);
methodVisitor.visitJumpInsn(Opcodes.IFNULL, fail);
}
// if (!eventHandler.shouldCommit(duration) goto fail;
getEventHandler(methodVisitor);
methodVisitor.visitVarInsn(Opcodes.ALOAD, 0);

@ -79,6 +79,14 @@ public final class SecuritySupport {
static final SafePath USER_HOME = getPathInProperty("user.home", null);
static final SafePath JAVA_IO_TMPDIR = getPathInProperty("java.io.tmpdir", null);
static {
// ensure module java.base can read module jdk.jfr as early as possible
addReadEdge(Object.class);
addHandlerExport(Object.class);
addEventsExport(Object.class);
addInstrumentExport(Object.class);
}
final static class SecureRecorderListener implements FlightRecorderListener {
private final AccessControlContext context;
@ -262,6 +270,18 @@ public final class SecuritySupport {
Modules.addExports(JFR_MODULE, Utils.HANDLERS_PACKAGE_NAME, clazz.getModule());
}
static void addEventsExport(Class<?> clazz) {
Modules.addExports(JFR_MODULE, Utils.EVENTS_PACKAGE_NAME, clazz.getModule());
}
static void addInstrumentExport(Class<?> clazz) {
Modules.addExports(JFR_MODULE, Utils.INSTRUMENT_PACKAGE_NAME, clazz.getModule());
}
static void addReadEdge(Class<?> clazz) {
Modules.addReads(clazz.getModule(), JFR_MODULE);
}
public static void registerEvent(Class<? extends jdk.internal.event.Event> eventClass) {
doPrivileged(() -> MetadataRepository.getInstance().register(eventClass), new FlightRecorderPermission(Utils.REGISTER_EVENT));
}

@ -28,7 +28,6 @@ package jdk.jfr.internal.instrument;
import java.util.ArrayList;
import java.util.List;
import jdk.internal.module.Modules;
import jdk.jfr.Event;
import jdk.jfr.FlightRecorder;
import jdk.jfr.events.ActiveRecordingEvent;
@ -99,12 +98,6 @@ public final class JDKEvents {
public synchronized static void initialize() {
try {
if (initializationTriggered == false) {
Module jdkJfrModule = Event.class.getModule();
Module javaBaseModule = Object.class.getModule();
Modules.addReads(javaBaseModule, jdkJfrModule);
Modules.addExports(jdkJfrModule, Utils.EVENTS_PACKAGE_NAME, javaBaseModule);
Modules.addExports(jdkJfrModule, Utils.INSTRUMENT_PACKAGE_NAME, javaBaseModule);
Modules.addExports(jdkJfrModule, Utils.HANDLERS_PACKAGE_NAME, javaBaseModule);
for (Class<?> mirrorEventClass : mirrorEventClasses) {
SecuritySupport.registerMirror(((Class<? extends Event>)mirrorEventClass));
}