--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java Thu Oct 10 17:36:57 2019 +0200
+++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java Fri Oct 11 19:46:05 2019 +0200
@@ -62,7 +62,6 @@
private boolean staleMetadata = true;
private boolean unregistered;
private long lastUnloaded = -1;
- private boolean flushMetadata;
public MetadataRepository() {
initializeJVMEventTypes();
@@ -144,7 +143,6 @@
typeLibrary.addType(handler.getPlatformEventType());
if (jvm.isRecording()) {
storeDescriptorInJVM(); // needed for emergency dump
- flushMetadata = true;
settingsManager.setEventControl(handler.getEventControl());
settingsManager.updateRetransform(Collections.singletonList((eventClass)));
} else {
@@ -265,20 +263,21 @@
// Lock around setOutput ensures that other threads don't
// emit events after setOutput and unregister the event class, before a call
// to storeDescriptorInJVM
- synchronized void setOutput(String filename) {
+ synchronized void setOutput(String filename) {
+ if (staleMetadata) {
+ storeDescriptorInJVM();
+ }
jvm.setOutput(filename);
if (filename != null) {
RepositoryFiles.notifyNewFile();
}
- flushMetadata = false;
unregisterUnloaded();
if (unregistered) {
- staleMetadata = typeLibrary.clearUnregistered();
+ if (typeLibrary.clearUnregistered()) {
+ storeDescriptorInJVM();
+ }
unregistered = false;
}
- if (staleMetadata) {
- storeDescriptorInJVM();
- }
}
private void unregisterUnloaded() {
@@ -318,11 +317,10 @@
}
public synchronized void flush() {
- jvm.flush(flushMetadata);
- this.flushMetadata = false;
+ if (staleMetadata) {
+ storeDescriptorInJVM();
+ }
+ jvm.flush();
}
-
-
-
}