src/os/windows/vm/os_windows.cpp
Print this page
*** 1,7 ****
/*
! * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright 1997-2010 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 140,149 ****
--- 140,152 ----
void os::run_periodic_checks() {
return;
}
#ifndef _WIN64
+ // previous UnhandledExceptionFilter, if there is one
+ static LPTOP_LEVEL_EXCEPTION_FILTER prev_uef_handler = NULL;
+
LONG WINAPI Handle_FLT_Exception(struct _EXCEPTION_POINTERS* exceptionInfo);
#endif
void os::init_system_properties_values() {
/* sysclasspath, java_home, dll_dir */
{
*** 258,268 ****
Arguments::set_endorsed_dirs(buf);
#undef ENDORSED_DIR
}
#ifndef _WIN64
! SetUnhandledExceptionFilter(Handle_FLT_Exception);
#endif
// Done
return;
}
--- 261,272 ----
Arguments::set_endorsed_dirs(buf);
#undef ENDORSED_DIR
}
#ifndef _WIN64
! // set our UnhandledExceptionFilter and save any previous one
! prev_uef_handler = SetUnhandledExceptionFilter(Handle_FLT_Exception);
#endif
// Done
return;
}
*** 1988,1997 ****
--- 1992,2008 ----
// Mask out pending FLT exceptions
ctx->FloatSave.StatusWord &= 0xffffff00;
return EXCEPTION_CONTINUE_EXECUTION;
}
}
+
+ if (prev_uef_handler != NULL) {
+ // We didn't handle this exception so pass it to the previous
+ // UnhandledExceptionFilter.
+ return (prev_uef_handler)(exceptionInfo);
+ }
+
return EXCEPTION_CONTINUE_SEARCH;
}
#else //_WIN64
/*
On Windows, the mxcsr control bits are non-volatile across calls