hotspot/src/os/windows/vm/os_windows.cpp
LONG WINAPI os::win32::serialize_fault_filter(struct _EXCEPTION_POINTERS* e) {
{- -------------------------------------------
(1) もし例外が EXCEPTION_ACCESS_VIOLATION であり, かつ
そのアドレスが serialize page であれば (= os::is_memory_serialize_page() が true を返せば),
EXCEPTION_CONTINUE_EXECUTION をリターンする.
それ以外の場合には, EXCEPTION_CONTINUE_SEARCH をリターンする.
(この場合は, 何故 os::block_on_serialize_page_trap() で待機していない?? #TODO)
---------------------------------------- -}
DWORD exception_code = e->ExceptionRecord->ExceptionCode;
if ( exception_code == EXCEPTION_ACCESS_VIOLATION ) {
JavaThread* thread = (JavaThread*)ThreadLocalStorage::get_thread_slow();
PEXCEPTION_RECORD exceptionRecord = e->ExceptionRecord;
address addr = (address) exceptionRecord->ExceptionInformation[1];
if (os::is_memory_serialize_page(thread, addr))
return EXCEPTION_CONTINUE_EXECUTION;
}
return EXCEPTION_CONTINUE_SEARCH;
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.