(S) RFR: 8154589: assert(k != NULL) failed: preloaded klass not initialized

David Holmes david.holmes at oracle.com
Wed May 25 05:05:58 UTC 2016


Bug: https://bugs.openjdk.java.net/browse/JDK-8154589

webrev: http://cr.openjdk.java.net/~dholmes/8154589/webrev/

We sometimes see tests failing with a VM assertion failure that a klass 
was not loaded (the actual assertion message is wrong):

# assert(k != NULL) failed: preloaded klass not initialized

Stack: [0xfffffd7fa80ff000,0xfffffd7fa81ff000], sp=0xfffffd7fa81fc570, 
free space=1013k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, 
C=native code)
V [libjvm.so+0x2a01a57] void VMError::report(outputStream*)+0x937
V [libjvm.so+0x2a02e4b] void VMError::report_and_die()+0x55f
V [libjvm.so+0x10b670b] void report_vm_error(const char*,int,const 
char*,const char*)+0x55f
V [libjvm.so+0x28937e5] void ConcurrentLocksDump::dump_at_safepoint()+0x43d
V [libjvm.so+0x287ab7e] void 
Threads::print_on(outputStream*,bool,bool,bool)+0xcce
V [libjvm.so+0x2a372a7] void VM_PrintThreads::doit()+0x1b
V [libjvm.so+0x2a366e9] void VM_Operation::evaluate()+0xc5


In a few of the VMOperation doit_prologue methods we have this logic to 
ensure the AOS class is loaded:

java_util_concurrent_locks_AbstractOwnableSynchronizer::initialize(JavaThread::current());

but we don't check if the class actually was successfully loaded! We may 
have an exception pending due to OOME for example. Because the prologue 
returns true, the VMOp is posted for the VMThread to execute and when 
doit() accesses the class that was presumed loaded by the prologue we 
get NULL and hit the assertion.

Simple fix is to just return false if an exception is pending.

Testing: jprt, tmtools tests (in progress)

Thanks,
David


More information about the hotspot-runtime-dev mailing list