RFR: 8255452: Doing GC during JVMTI MethodExit event posting breaks return oop
Dean Long
dlong at openjdk.java.net
Fri Oct 30 08:06:42 UTC 2020
On Fri, 30 Oct 2020 06:56:13 GMT, Richard Reingruber <rrich at openjdk.org> wrote:
>> Changes requested by coleenp (Reviewer).
>
> Hi Erik,
>
> is it possible for GC to mistake a primitive value for a reference when posting the exit event?
>
> My understanding is: we are at a random bci of a method that is forced to return early. The expression stack is emptied and the return value is pushed on the expression stack then we call into the interpreter runtime to post the JVMTI method exit event during which we come to a safepoint for GC. The oop map for the bci does not cover this forced early return and if the return value is an object then the reference pushed on the expression stack before is not updated by GC. With your fix the value is updated if it is a reference.
>
> If this is correct then to me it appears as if GC can also crash because the oop map for the random bci tells there has to be a reference at the stack position of the return value if it actually is a primitive value.
I think you've discovered JDK-6449023.
-------------
PR: https://git.openjdk.java.net/jdk/pull/930
More information about the hotspot-dev
mailing list