8198337: -XX:StartFlightRecording=dumponexit=true,disk=false doesn't work
Reviewed-by: mgronlun
--- 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",