On Tue, 3 Nov 2020 17:49:38 GMT, Serguei Spitsyn <[email protected]> wrote:
> Hi Erik,
>
> I'm not sure, if this fragment is still needed:
>
> ```
> 1620 if (state == NULL || !state->is_interp_only_mode()) {
> 1621 // for any thread that actually wants method exit, interp_only_mode
> is set
> 1622 return;
> 1623 }
> ```
Seems like it is not needed. I removed it.
> Also, can it be that this condition is true:
> ` (state == NULL || !state->is_interp_only_mode())`
> but the top frame is interpreted?
> If so, then should we still safe/restore the result oop over a possible
> safepoint?
It could definitely be that the top frame is interpreted even though that
condition is true. However, we now enter InterpreterRuntime::post_method_exit
as a JRT_BLOCK_ENTRY call, which performs no transition (similar to JRT_LEAF).
So if so we should just return back to the caller without doing anything, and
no GC will happen in this path then. It is only when we perform the JRT_BLOCK
and JRT_BLOCK_END that we allow GCs to happen, and we save/restore the result
across that section.
Thanks,
> Thanks,
> Serguei
-------------
PR: https://git.openjdk.java.net/jdk/pull/930