RFR: 8146416: java.lang.OutOfMemoryError triggers: assert(current_bci == 0) failed: bci isn't zero for do_not_unlock_if_synchronized

Roland Westrelin rwestrel at redhat.com
Wed May 25 15:51:50 UTC 2016


> in exception triggered deopt, the interpreter continuation pc will be 
> Interpreter::_rethrow_exception_entry without the pending_exception flag
> reset*(the realloc set pending exception flag).
> this causes code to take different path after
> InterpreterRuntime::exception_handler_for_exception(as pending_exception
> is still set). and pop frame logic doesnt work.

I think the fix then is to not go to
Interpreter::_rethrow_exception_entry with a pending exception. So in
that case, Deoptimization::realloc_objects() should overwrite
_exception_oop rather than set _pending_exception.

Unfortunately, because of this code at the end of fetch_unroll_info_helper):

#ifdef INCLUDE_JVMCI
  if (exceptionObject() != NULL) {
    thread->set_exception_oop(exceptionObject());
    exec_mode = Unpack_exception;
  }
#endif

that might not be good enough for JVMCI. So maybe we want something like
this right after the code above:

if (thread->has_pending_exception() && thread->exception_oop() != NULL) {
  assert(thread->frames_to_pop_failed_realloc() > 0, "realloc should
have failed");
  thread->set_exception_oop(thread->pending_exception());
  thread->clear_pending_exception();
}

Roland.

> 
> and in case of single frame case deopt. pop never happens and
> do_not_unlock_if_synchronized is not made false.
> 
> even in TemplateInterpreterGenerator::generate_deopt_entry_for case
> pending exception is not expected!
> 
> see..
>  // handle exceptions
> 
>   {
>     Label L;
>     __ cmpptr(Address(thread, Thread::pending_exception_offset()),
> (int32_t) NULL_WORD);
>     __ jcc(Assembler::zero, L);
>     __ call_VM(noreg,
>                CAST_FROM_FN_PTR(address,
>                                
> InterpreterRuntime::throw_pending_exception));
>     __ should_not_reach_here();
>     __ bind(L);
>   }
> 
>>
>> With your test case, can the failure be reproduced with c2?
> Yes.
> 
> Thank you
> Jamsheed
>> Roland.
> 


More information about the hotspot-compiler-dev mailing list