< prev index next >
src/hotspot/share/utilities/debug.cpp
Print this page
*** 321,331 ****
// A number of threads may attempt to report OutOfMemoryError at around the
// same time. To avoid dumping the heap or executing the data collection
// commands multiple times we just do it once when the first threads reports
// the error.
! if (Atomic::cmpxchg(1, &out_of_memory_reported, 0) == 0) {
// create heap dump before OnOutOfMemoryError commands are executed
if (HeapDumpOnOutOfMemoryError) {
tty->print_cr("java.lang.OutOfMemoryError: %s", message);
HeapDumper::dump_heap_from_oome();
}
--- 321,331 ----
// A number of threads may attempt to report OutOfMemoryError at around the
// same time. To avoid dumping the heap or executing the data collection
// commands multiple times we just do it once when the first threads reports
// the error.
! if (Atomic::cmpxchg(&out_of_memory_reported, 0, 1) == 0) {
// create heap dump before OnOutOfMemoryError commands are executed
if (HeapDumpOnOutOfMemoryError) {
tty->print_cr("java.lang.OutOfMemoryError: %s", message);
HeapDumper::dump_heap_from_oome();
}
*** 760,775 ****
return false; // unprotecting memory may fail in OOM situations, as surprising as this sounds.
}
// Store Context away.
if (ucVoid) {
const intx my_tid = os::current_thread_id();
! if (Atomic::cmpxchg(my_tid, &g_asserting_thread, (intx)0) == 0) {
store_context(ucVoid);
g_assertion_context = &g_stored_assertion_context;
}
}
return true;
}
return false;
}
#endif // CAN_SHOW_REGISTERS_ON_ASSERT
-
--- 760,774 ----
return false; // unprotecting memory may fail in OOM situations, as surprising as this sounds.
}
// Store Context away.
if (ucVoid) {
const intx my_tid = os::current_thread_id();
! if (Atomic::cmpxchg(&g_asserting_thread, (intx)0, my_tid) == 0) {
store_context(ucVoid);
g_assertion_context = &g_stored_assertion_context;
}
}
return true;
}
return false;
}
#endif // CAN_SHOW_REGISTERS_ON_ASSERT
< prev index next >