<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 18pt; color: rgb(0, 0, 0);" class="elementToProof">
Hi Yasumasa,</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 18pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 18pt; color: rgb(0, 0, 0);" class="elementToProof">
This looks more reasonable, although most of it is a refactoring.</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 18pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 18pt; color: rgb(0, 0, 0);" class="elementToProof">
Could you turn it into a PR with a webrev so it's easier to review?</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 18pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 18pt; color: rgb(0, 0, 0);" class="elementToProof">
Thanks</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 18pt; color: rgb(0, 0, 0);" class="elementToProof">
Erik</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 18pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 18pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> hotspot-jfr-dev <hotspot-jfr-dev-retn@openjdk.org> on behalf of Yasumasa Suenaga <suenaga@oss.nttdata.com><br>
<b>Sent:</b> Thursday, July 24, 2025 11:21 AM<br>
<b>To:</b> hotspot-jfr-dev@openjdk.org <hotspot-jfr-dev@openjdk.org><br>
<b>Subject:</b> JFR emergency dump didn't happen at OOM</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Hi all,<br>
<br>
I reported and proposed the fix about 6 years ago (!), I faced the issue again that would be helpful if this is fixed.<br>
<br>
6 years ago, we discussed about this issue in [1], then I hear JDK-8196050 might fix this issue, but it hasn't yet happened unfortunately...<br>
<br>
JDK codebase has been made a lot of changes in 6 years, so I think we can fix simply than I proposed before.<br>
All of changes is [2]. It is not so big change and it is good because no flags are added in .jfc files. What do you think? I will send PR if it is ok, but I want to hear your opinions before PR (because we discussed before).<br>
<br>
For example, we can pass a flag for OOM rather than exception handler as following:<br>
<br>
```<br>
--- a/src/hotspot/share/jfr/recorder/repository/jfrEmergencyDump.cpp<br>
+++ b/src/hotspot/share/jfr/recorder/repository/jfrEmergencyDump.cpp<br>
@@ -556,22 +556,21 @@ class JavaThreadInVMAndNative : public StackObj {<br>
}<br>
};<br>
<br>
-static void post_events(bool exception_handler, Thread* thread) {<br>
- if (exception_handler) {<br>
+static void post_events(bool is_oom, Thread* thread) {<br>
+ if (is_oom) {<br>
+ LeakProfiler::emit_events(max_jlong, false, false);<br>
+ } else {<br>
EventShutdown e;<br>
e.set_reason("VM Error");<br>
e.commit();<br>
- } else {<br>
- // OOM<br>
- LeakProfiler::emit_events(max_jlong, false, false);<br>
}<br>
EventDumpReason event;<br>
- event.set_reason(exception_handler ? "Crash" : "Out of Memory");<br>
+ event.set_reason(is_oom ? "Out of Memory" : "Crash");<br>
event.set_recordingId(-1);<br>
event.commit();<br>
}<br>
```<br>
<br>
And also we can identify whether OOM or not (crash) via `id` in argument of `report_and_die`:<br>
```<br>
--- a/src/hotspot/share/utilities/vmError.cpp<br>
+++ b/src/hotspot/share/utilities/vmError.cpp<br>
@@ -1856,7 +1856,7 @@ void VMError::report_and_die(int id, const char* message, const char* detail_fmt<br>
log.set_fd(-1);<br>
}<br>
<br>
- JFR_ONLY(Jfr::on_vm_shutdown(true);)<br>
+ JFR_ONLY(Jfr::on_vm_shutdown(static_cast<VMErrorType>(_id) == OOM_JAVA_HEAP_FATAL);)<br>
<br>
```<br>
<br>
<br>
Thanks,<br>
<br>
Yasumasa<br>
<br>
<br>
[1] <a href="https://mail.openjdk.org/pipermail/hotspot-jfr-dev/2019-January/000381.html">
https://mail.openjdk.org/pipermail/hotspot-jfr-dev/2019-January/000381.html</a><br>
[2] <a href="https://github.com/YaSuenag/jdk/commit/3f18fd74679387c385a8f79c8bea5b6b1f2815c0">
https://github.com/YaSuenag/jdk/commit/3f18fd74679387c385a8f79c8bea5b6b1f2815c0</a><br>
</div>
</span></font></div>
</body>
</html>