assert(_exception_caught == false) failed: _exception_caught is out of phase
Richard Reingruber
richard.reingruber at sap.com
Wed Aug 12 08:36:54 UTC 2015
> Adding serviceability-dev at ... since this JVM/TI...
Thanks Dan.
Sorry, forgot to add a stack trace. This is from amd64:
Stack: [0x00007fe6cdacc000,0x00007fe6cdbcd000], sp=0x00007fe6cdbc9d30, free space=1015k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0xfce6f1] VMError::report(outputStream*)+0x12fd
V [libjvm.so+0xfcfbed] VMError::report_and_die()+0x3fd
V [libjvm.so+0x86b82d] report_vm_error(char const*, int, char const*, char const*)+0xb4
V [libjvm.so+0xbe44ba] JvmtiThreadState::clear_exception_detected()+0x4e
V [libjvm.so+0xbe3046] JvmtiExport::clear_detected_exception(JavaThread*)+0x72
V [libjvm.so+0xb50627] JVM_DoPrivileged+0x7e4
C [libjava.so+0xd04e] Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedAction_2+0x42
j java.security.AccessController.doPrivileged(Ljava/security/PrivilegedAction;)Ljava/lang/Object;+0
j ExceptionCaughtOutOfPhaseAssertion.main([Ljava/lang/String;)V+59
v ~StubRoutines::call_stub
[...]
I can reproduce this on amd64, sparcv9 and ppc64 with dbg builds of the current openjdk9.
Richard.
On 08/11/2015 08:38 PM, Daniel D. Daugherty wrote:
> Adding serviceability-dev at ... since this JVM/TI...
>
> Dan
>
>
> On 8/11/15 9:06 AM, Reingruber, Richard wrote:
>> Hi,
>>
>> I would like to report that the assertion
>>
>> assert(_exception_caught == false) failed: _exception_caught is out of phase
>>
>> at jvmtiThreadState.hpp:170 fires when running the command
>>
>> ./images/jdk/bin/java -agentlib:jdwp=transport=dt_socket,address=9000,server=y,suspend=n -Xbatch ExceptionCaughtOutOfPhaseAssertion
>>
>> (when analyzing you might want to add -XX:-TieredCompilation -XX:-Inline '-XX:CompileCommand=compileonly *::run')
>>
>> Source Code:
>>
>> import java.security.AccessController;
>> import java.security.PrivilegedAction;
>> public class ExceptionCaughtOutOfPhaseAssertion {
>> public static void main(String[] args) {
>> PrivilegedAction action = new HotThrowingAction();
>> System.out.println("### Warm-up");
>> for(int i=0; i<11000; i++) {
>> try {
>> action.run(); // call run() to get it compiled
>> } catch(Throwable t) { /* ignored */ }
>> }
>> System.out.println("### Warm-up done");
>> System.out.println("### Executing privileged action");
>> AccessController.doPrivileged(action);
>> }
>> public static class HotThrowingAction implements PrivilegedAction {
>> public Object run() {
>> throw new Error();
>> }
>> }
>> }
>> My Analysis:
>>
>> * Error is thrown in interpreted activation of run()
>> - JvmtiThreadState::_exception_detected is set to true
>> - JvmtiThreadState::_exception_caught is set to false
>> * Error is caught in main() method
>> - JvmtiThreadState::_exception_detected is set to false
>> - JvmtiThreadState::_exception_caught is set to true
>> * run() method is compiled
>> * PrivilegedAction is executed
>> * compiled activation of run() method
>> - Error object is allocated and initialized
>> - JavaThread::_should_post_on_exceptions_flag is checked and found to be false
>> -> *no* uncommon trap
>> - compiled frame is popped, rethrow stub calls OptoRuntime::rethrow_C()
>> - _exception_detected is *not* set, remains false
>> - _exception_caught is still true
>> * Java call in JVM_DoPrivileged() returns with pending exception
>> * CLEAR_PENDING_EXCEPTION triggers the assertion
>>
>> How to Fix? I'm not really an expert in this area, but here are my two cent:
>>
>> (a) Improve the assertion ...but how?! Toggling JVMTI exception notifications does not seem
>> to be synchronized with java execution.
>>
>> (b) Calling JvmtiExport::post_exception_throw() in OptoRuntime::rethrow_C() is probably not possible,
>> because of the JRT_LEAF comment for rethrow_C(), but _exception_detected = true could be set.
>>
>> (c) Remove the assertion.
>>
>> I guess (b) could be acceptable.
>>
>> What do you think?
>>
>> Best regards,
>> Richard.
>
More information about the serviceability-dev
mailing list