8213825: assert(false) failed: Non-balanced monitor enter/exit! Likely JNI locking

Wed, 23 Jan 2019 23:24:10 -0800

author
jcm
date
Wed, 23 Jan 2019 23:24:10 -0800
changeset 9654
6b67e2bcf2be
parent 9653
f59f67eb8bc8
child 9655
a49d6f06f0d5

8213825: assert(false) failed: Non-balanced monitor enter/exit! Likely JNI locking
Summary: skip sfpt optimization for Load is removed for Java Object's Markword Load.
Reviewed-by: kvn, dlong

src/share/vm/opto/memnode.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/vm/opto/memnode.cpp	Mon Mar 18 08:57:23 2019 +0100
     1.2 +++ b/src/share/vm/opto/memnode.cpp	Wed Jan 23 23:24:10 2019 -0800
     1.3 @@ -1514,10 +1514,14 @@
     1.4    Node* ctrl    = in(MemNode::Control);
     1.5    Node* address = in(MemNode::Address);
     1.6  
     1.7 +  bool addr_mark = ((phase->type(address)->isa_oopptr() || phase->type(address)->isa_narrowoop()) &&
     1.8 +         phase->type(address)->is_ptr()->offset() == oopDesc::mark_offset_in_bytes());
     1.9 +
    1.10    // Skip up past a SafePoint control.  Cannot do this for Stores because
    1.11    // pointer stores & cardmarks must stay on the same side of a SafePoint.
    1.12    if( ctrl != NULL && ctrl->Opcode() == Op_SafePoint &&
    1.13 -      phase->C->get_alias_index(phase->type(address)->is_ptr()) != Compile::AliasIdxRaw ) {
    1.14 +      phase->C->get_alias_index(phase->type(address)->is_ptr()) != Compile::AliasIdxRaw  &&
    1.15 +      !addr_mark ) {
    1.16      ctrl = ctrl->in(0);
    1.17      set_req(MemNode::Control,ctrl);
    1.18    }

mercurial