RFR: 8360164: AOT cache creation crashes in ~ThreadTotalCPUTimeClosure() [v3]
    Ioi Lam 
    iklam at openjdk.org
       
    Fri Jun 27 16:55:33 UTC 2025
    
    
  
On Fri, 27 Jun 2025 04:40:51 GMT, David Holmes <dholmes at openjdk.org> wrote:
>> Ioi Lam has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Use vm_direct_exit instead, as at this point we have not finished Threads::create_vm() yet, so we may not have done all the initialization to be able to call before_exit()
>
> src/hotspot/share/cds/metaspaceShared.cpp line 846:
> 
>> 844:       }
>> 845:       ThreadToNativeFromVM ttnfv(THREAD);
>> 846:       JVM_Halt(0);
> 
> `JVM_Halt` is the native backend for the JDK's `System.halt()` method. Whilst it might do what you need under-the-covers, I think it would be clearer to not actually call it, but just call `before_exit` and `vm_exit` directly. Even then you need to be careful as to how the `halt` parameter will be interpreted - in particular the affect on `Jfr::on_vm_shutdown`. In fact `before_exit` needs detailed examination to see if everything it does truly makes sense in this context.
I changed the code to call `vm_direct_exit()` instead. At this point, we are still in the middle of `JNI_CreateJavaVM_inner`
0 vm_direct_exit 
1 MetaspaceShared::preload_and_dump 
2 Threads::create_vm 
3 JNI_CreateJavaVM_inner 
4 JNI_CreateJavaVM 
5 start_thread 
6 clone3 
so we may not have finished all the initialization that `before_exit()` may rely on.
Here's the code that's not yet executed:
https://github.com/openjdk/jdk/blob/da7080fffb2389465dc9afca6d02e9085fe15302/src/hotspot/share/prims/jni.cpp#L3591-L3635
To be honest, I am not sure where is the starting point where it's safe to call `before_exit()` or `System.exit()`. At this point a lot of Java code has been executed (for setting up the module graph, etc), but I am not sure what happens when some of that Java code calls `System.exit()`, or whether such a scenario has been (sufficiently) tested.
BTW, JFR is disabled when we are dumping CDS:
https://github.com/openjdk/jdk/blob/da7080fffb2389465dc9afca6d02e9085fe15302/src/hotspot/share/jfr/recorder/jfrRecorder.cpp#L198-L206
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/26008#discussion_r2172422372
    
    
More information about the hotspot-runtime-dev
mailing list