[10] RFR(S): 8190797: OSR compilation fails with "assert(__the_thread__->can_call_java()) failed: can not load classes with compiler thread"

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[10] RFR(S): 8190797: OSR compilation fails with "assert(__the_thread__->can_call_java()) failed: can not load classes with compiler thread"

Tobias Hartmann-2
Hi,

please review the following patch:
https://bugs.openjdk.java.net/browse/JDK-8190797
http://cr.openjdk.java.net/~thartmann/8190797/webrev.00/

When oop map creation fails, we try to throw a LinkageError to propagate the error message. If this happens in the
compiler thread (for example, during OSR compilation), we fail because a compiler thread cannot initialize an exception
object.

I've fixed this by bailing out with a meaningful message in case !Thread::can_call_java(). Please note that even if we
are able to instantiate an exception, we will still fail with ShouldNotReachHere because compute_map(TRAPS) is called
with CATCH (see comments in the bug for a detailed explanation). This fix is not about changing this behavior but to
fail with a meaningful error message during compilation. This should only happen if something is seriously broken (for
example, incorrect bytecode with -noverify, see TestLinkageErrorInGenerateOopMap). In this case we would probably hit
other issues as well if we would continue execution.

Thanks,
Tobias