src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java
branchJEP-349-branch
changeset 58567 e77a97d0edbb
parent 58165 8584c5b96cb6
child 58837 2bfbb50dd97d
--- 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();
     }
 
-
-
-
 }