RFR: 8146416: java.lang.OutOfMemoryError triggers: assert(current_bci == 0) failed: bci isn't zero for do_not_unlock_if_synchronized
Jamsheed C m
jamsheed.c.m at oracle.com
Thu Jun 2 08:59:04 UTC 2016
On 6/2/2016 2:26 PM, Roland Westrelin wrote:
>>>>> So given uncommon traps are unaffected and only deopts are, isn't the
>>>>> change below good enough?
>>>> uncommon traps are affected in JVMCI case. pending exception check is
>>>> after jvmci lock code.
>>> That code in TemplateInterpreterGenerator::generate_deopt_entry_for()?
>>>
>>> #if INCLUDE_JVMCI
>>> // Check if we need to take lock at entry of synchronized method.
>>> if (UseJVMCICompiler) {
>>> Label L;
>>> __ cmpb(Address(thread, JavaThread::pending_monitorenter_offset()), 0);
>>> __ jcc(Assembler::zero, L);
>>> // Clear flag.
>>> __ movb(Address(thread, JavaThread::pending_monitorenter_offset()), 0);
>>> // Satisfy calling convention for lock_method().
>>> __ get_method(rbx);
>>> // Take lock.
>>> lock_method();
>>> __ bind(L);
>>> }
>>> #endif
>> Yes.
> Can't we simply clear pending_monitorenter, for instance in
> Deoptimization::pop_frames_failed_reallocs?
Yes we can do that.
that should solve all our issues..
Best Regards,
Jamsheed
>
> Roland.
>
>
> diff --git a/src/share/vm/runtime/deoptimization.cpp b/src/share/vm/runtime/deoptimization.cpp
> --- a/src/share/vm/runtime/deoptimization.cpp
> +++ b/src/share/vm/runtime/deoptimization.cpp
> @@ -497,6 +497,12 @@
> exec_mode = Unpack_exception;
> }
> #endif
> + if (thread->frames_to_pop_failed_realloc() > 0) {
> + assert(thread->has_pending_exception(), "should have thrown OOME");
> + thread->set_exception_oop(thread->pending_exception());
> + thread->clear_pending_exception();
> + exec_mode = Unpack_exception;
> + }
>
> UnrollBlock* info = new UnrollBlock(array->frame_size() * BytesPerWord,
> caller_adjustment * BytesPerWord,
> @@ -1228,6 +1234,7 @@
> #endif
> }
> }
> + thread->set_pending_monitorenter(false);
> }
> #endif
>
More information about the hotspot-compiler-dev
mailing list