8198337: -XX:StartFlightRecording=dumponexit=true,disk=false doesn't work
authoregahlin
Mon, 21 May 2018 14:46:12 +0200
changeset 50194 2ae4cd9d809d
parent 50193 49c3e91c424f
child 50195 ec881a19d294
8198337: -XX:StartFlightRecording=dumponexit=true,disk=false doesn't work Reviewed-by: mgronlun
src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecorder.java
src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecording.java
test/jdk/jdk/jfr/startupargs/TestDumpOnExit.java
--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecorder.java	Mon May 21 11:33:59 2018 +0200
+++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecorder.java	Mon May 21 14:46:12 2018 +0200
@@ -245,7 +245,7 @@
         RequestEngine.doChunkBegin();
     }
 
-    synchronized void stop(PlatformRecording recording) {
+    synchronized void stop(PlatformRecording recording, WriteableUserPath alternativePath) {
         RecordingState state = recording.getState();
 
         if (Utils.isAfter(state, RecordingState.RUNNING)) {
@@ -278,7 +278,7 @@
                 }
             } else {
                 // last memory
-                dumpMemoryToDestination(recording);
+                dumpMemoryToDestination(recording, alternativePath);
             }
             jvm.endRecording_();
             disableEvents();
@@ -314,8 +314,8 @@
         }
     }
 
-    private void dumpMemoryToDestination(PlatformRecording recording) {
-        WriteableUserPath dest = recording.getDestination();
+    private void dumpMemoryToDestination(PlatformRecording recording, WriteableUserPath alternativePath) {
+        WriteableUserPath dest = alternativePath != null ? alternativePath : recording.getDestination();
         if (dest != null) {
             MetadataRepository.getInstance().setOutput(dest.getText());
             recording.clearDestination();
--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecording.java	Mon May 21 11:33:59 2018 +0200
+++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecording.java	Mon May 21 14:46:12 2018 +0200
@@ -161,7 +161,7 @@
                 stopTask.cancel();
                 stopTask = null;
             }
-            recorder.stop(this);
+            recorder.stop(this, alternativePath);
             String endTExt = reason == null ? "" : ". Reason \"" + reason + "\".";
             Logger.log(LogTag.JFR, LogLevel.INFO, "Stopped recording \"" + recording.getName() + "\" (" + recording.getId()+ ")" + endTExt);
             this.stopTime = Instant.now();
--- a/test/jdk/jdk/jfr/startupargs/TestDumpOnExit.java	Mon May 21 11:33:59 2018 +0200
+++ b/test/jdk/jdk/jfr/startupargs/TestDumpOnExit.java	Mon May 21 14:46:12 2018 +0200
@@ -56,6 +56,13 @@
                 "-XX:StartFlightRecording=filename=./dumped.jfr,dumponexit=true,settings=profile",
                 "jdk.jfr.startupargs.TestDumpOnExit$TestMain"
         );
+        // Test a memory recording without a security manager
+        testDumponExit(() -> findJFRFileInCurrentDirectory(),
+                "-Xlog:jfr=trace",
+                "-XX:StartFlightRecording=dumponexit=true,disk=false",
+                "jdk.jfr.startupargs.TestDumpOnExit$TestMain"
+        );
+
         // Test with security manager and a file name relative to current directory
         testDumponExit(() -> dumpPath,
                 "-Xlog:jfr=trace",