On Thu, 13 Nov 2025 19:41:40 GMT, Mat Carter <[email protected]> wrote:

>> Add jcmd AOT.end_recording diagnostic command.  When this command is issued, 
>> a targeted JVM that is currently recording AOT information will stop 
>> recording.  Existing functionality is preserved: when stopped the JVM will 
>> create the required artifacts based on the execution mode.  Conveniently as 
>> the application running on the JVM has not stopped (as was previously the 
>> only way to stop recording), the application will resume execution after the 
>> artifacts have been generated.
>> 
>> The command will report back to the user one of the following messages 
>> depending on the state of the JVM:
>> 
>> - Error! Not a recording run
>> - Error! Not recording
>> - Recording ended successfully
>> - Error! Failed to end recording
>> 
>> It follows that issues the command to a JVM that is recording, twice in 
>> succession, should (baring internal errors) would produce the following two 
>> responses:
>> 
>> - Recording ended successfully
>> - Error! Not recording
>> 
>> Passes tier1 on linux (x64) and windows (x64)
>
> Mat Carter has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Document use of DiagnosticCommand

Comments.

src/hotspot/share/cds/aotMetaspace.cpp line 961:

> 959: }
> 960: 
> 961: bool AOTMetaspace::is_recording_preimage_static_archive() {

I think the name should be `preimage_static_archive_dumped()` to match field's 
name you accessing and check ` == 1` instead. The code in 
`AOTEndRecordingDCmd::execute()` will be more clear then.

src/hotspot/share/cds/aotMetaspace.cpp line 962:

> 960: 
> 961: bool AOTMetaspace::is_recording_preimage_static_archive() {
> 962:   if (CDSConfig::is_dumping_preimage_static_archive()) {

This is called after you already checked 
`CDSConfig::is_dumping_preimage_static_archive()`. May be replace the check 
with assert.

src/hotspot/share/cds/aotMetaspace.cpp line 973:

> 971:       return;
> 972:     }
> 973:   }

Add comment that this could be called from different threads and possibly 
concurrently: when JCMD requested it and normal call during VM exit. We should 
dump archive only once.

src/hotspot/share/services/diagnosticCommand.cpp line 996:

> 994:     output()->print_cr("Error! Not a recording run");
> 995:     return;
> 996:   }

First, is `output()` directed to VM's tty or somewhere else?

Second, I think you need to be more verbose in error. Maybe:

Error: AOT recording is not initiated. VM flags -XX:AOTMode=record or 
-XX:AOTCacheOutput=<file> are missing.

src/hotspot/share/services/diagnosticCommand.cpp line 1000:

> 998:   if (!AOTMetaspace::is_recording_preimage_static_archive()) {
> 999:     output()->print_cr("Error! Not recording");
> 1000:     return;

This check is confusing because your error message is cryptic.
Actually I think you don't need any message here - it is not error. Use comment 
instead:

  // The other thread already initiated end of recording.

src/hotspot/share/services/diagnosticCommand.cpp line 1007:

> 1005:     output()->print_cr("Recording ended successfully");
> 1006:     return;
> 1007:   }

I think this should be reversed and message replaced with comment.

if (AOTMetaspace::is_recording_preimage_static_archive()) {
    // Other thread already dumped archive.
    return;
}
output()->print_cr("AOT recording ended successfully");

-------------

PR Review: https://git.openjdk.org/jdk/pull/27965#pullrequestreview-3466124096
PR Review Comment: https://git.openjdk.org/jdk/pull/27965#discussion_r2528503476
PR Review Comment: https://git.openjdk.org/jdk/pull/27965#discussion_r2528453164
PR Review Comment: https://git.openjdk.org/jdk/pull/27965#discussion_r2528486742
PR Review Comment: https://git.openjdk.org/jdk/pull/27965#discussion_r2528446012
PR Review Comment: https://git.openjdk.org/jdk/pull/27965#discussion_r2528465285
PR Review Comment: https://git.openjdk.org/jdk/pull/27965#discussion_r2528496380

Reply via email to