diff -r 2c3cc4b01880 -r c16ac7a2eba4 src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java Wed Oct 30 16:14:56 2019 +0100 +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java Wed Oct 30 19:43:52 2019 +0100 @@ -46,6 +46,7 @@ import jdk.jfr.Threshold; import jdk.jfr.ValueDescriptor; import jdk.jfr.internal.RequestEngine.RequestHook; +import jdk.jfr.internal.consumer.RepositoryFiles; import jdk.jfr.internal.handlers.EventHandler; public final class MetadataRepository { @@ -207,10 +208,14 @@ } public synchronized List getEventControls() { - List controls = new ArrayList<>(); + List> eventClasses = jvm.getAllEventClasses(); + ArrayList controls = new ArrayList<>(eventClasses.size() + nativeControls.size()); controls.addAll(nativeControls); - for (EventHandler eh : getEventHandlers()) { - controls.add(eh.getEventControl()); + for (Class clazz : eventClasses) { + EventHandler eh = Utils.getHandler(clazz); + if (eh != null) { + controls.add(eh.getEventControl()); + } } return controls; } @@ -263,7 +268,9 @@ storeDescriptorInJVM(); } jvm.setOutput(filename); - + if (filename != null) { + RepositoryFiles.notifyNewFile(); + } unregisterUnloaded(); if (unregistered) { if (typeLibrary.clearUnregistered()) { @@ -309,4 +316,11 @@ throw new InternalError("Mirror class must have annotation " + MirrorEvent.class.getName()); } + public synchronized void flush() { + if (staleMetadata) { + storeDescriptorInJVM(); + } + jvm.flush(); + } + }