--- 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<EventControl> getEventControls() {
- List<EventControl> controls = new ArrayList<>();
+ List<Class<? extends jdk.internal.event.Event>> eventClasses = jvm.getAllEventClasses();
+ ArrayList<EventControl> controls = new ArrayList<>(eventClasses.size() + nativeControls.size());
controls.addAll(nativeControls);
- for (EventHandler eh : getEventHandlers()) {
- controls.add(eh.getEventControl());
+ for (Class<? extends jdk.internal.event.Event> 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();
+ }
+
}