RFR: 8253540: InterpreterRuntime::monitorexit should be a JRT_LEAF function

Daniel D.Daugherty dcubed at openjdk.java.net
Wed Sep 23 17:29:51 UTC 2020


On Wed, 23 Sep 2020 16:03:14 GMT, Martin Doerr <mdoerr at openjdk.org> wrote:

>> That the monitor has already been unlocked, or is a null stacklock monitor has been already checked in the caller, so
>> the code that makes it a JRT_ENTRY_NO_ASYNC is unnecessary.
>> Making it a JRT_LEAF like the compiled method entries makes it safer. We know it can never safepoint and
>> unintentionally install a async exception.
>> Tested with tier1-6.
>
> src/hotspot/share/interpreter/interpreterRuntime.cpp line 742:
> 
>> 740:   oop obj = elem->obj();
>> 741:   assert(!obj->is_unlocked(), "caller checked these conditions");
>> 742:   assert(Universe::heap()->is_in_or_null(obj), "must be NULL or an object");
> 
> obj can't be null at this point

Agreed. If 'obj == NULL' on L740, the L741 would crash in ASSERT enabled bits.
The same is true of the original code if 'obj == NULL':
    old L744: if (elem == NULL || h_obj()->is_unlocked()) {
we would crash on is_unlocked() call.

-------------

PR: https://git.openjdk.java.net/jdk/pull/320


More information about the hotspot-runtime-dev mailing list