RFR(s): 8074860: Structured Exception Catcher missing around CreateJavaVM on Windows

Daniel D. Daugherty daniel.daugherty at oracle.com
Wed Apr 1 01:18:27 UTC 2015


On 3/11/15 9:40 AM, Thomas Stüfe wrote:
> Hi all,
>
> please review this smallish change:
>
> webrev:
> http://cr.openjdk.java.net/~stuefe/webrevs/8074860/webrev.01/webrev/

nit general comment - please update copyright year to 2015 as needed

src/cpu/x86/vm/vm_version_x86.cpp
src/os/windows/vm/os_windows.inline.hpp
     kvn added this use of CALL_TEST_FUNC_WITH_WRAPPER_IF_NEEDED().
     Looks like a clean removal to me.

src/os/windows/vm/os_windows.cpp
src/os/windows/vm/os_windows.hpp
     I added call_test_func_with_wrapper() back in 2013.
     Looks like a clean removal to me.

src/share/vm/prims/jni.cpp
     nit line 4047 - delete extra blank line

     The new JNI_CreateJavaVM() wrapper does the same thing as
     call_test_func_with_wrapper() that I added back in 2013.

Thumbs up!

Dan


> bug:  https://bugs.openjdk.java.net/browse/JDK-8074860
>
> This change adds SEH guards around JNI_CreateJavaVM(). Without the change,
> on Windows, the VM initialization runs without crash protection: crashes
> will terminate VM immediately without writing an error log; also, any
> techniques relying on signals will not work, e.g. SafeFetch().
>
> This was partly solved before on a case-by-case base by wrapping code
> sections which may crash in their own __try/__except wrappers - e.g. CPU
> feature probing.
>
> The change guards the whole of JNI_CreateJavaVM invocation in
> __try/__except. Unfortunately, for that to compile, I needed to introduce a
> wrapper around JNI_CreateJavaVM and move the whole of JNI_CreateJavaVM to a
> new function "JNI_CreateJavaVM_inner".
>
> This fix also gets rid of various workarounds which were used before to
> guard code sections.
>
> Thanks for reviewing!
>
> Oh, on a side note: I tried to figure out if threads which are attached
> from the outside via JNI AttachCurrentThread() are in any way guarded with
> SEH protection. Newly created threads are guarded because they run thru
> java_start() in os_windows.cpp, which adds SEH guards to all frames below.
> But for attached threads, I did not find any SEH guards - or maybe I am
> blind? What does that mean for java code running inside attached threads?
>
> Regards,
>
> Thomas Stuefe
>



More information about the hotspot-runtime-dev mailing list