RFR: 8255452: Doing GC during JVMTI MethodExit event posting breaks return oop [v2]

Erik Österlund eosterlund at openjdk.java.net
Tue Nov 3 13:54:57 UTC 2020


On Mon, 2 Nov 2020 21:00:23 GMT, Serguei Spitsyn <sspitsyn at openjdk.org> wrote:

> Erik,
> 
> Thank you for the update! It looks more elegant.
> 
> One concern is that after the move of this fragment to the post_method_exit_inner:
> 
> ```
> 1614   if (state == NULL || !state->is_interp_only_mode()) {
> 1615     // for any thread that actually wants method exit, interp_only_mode is set
> 1616     return;
> 1617   }
> ```
> 
> there is no guarantee that the current frame is interpreted below:
> 
> ```
> 1580     if (!exception_exit) {
> 1581       oop oop_result;
> 1582       BasicType type = current_frame.interpreter_frame_result(&oop_result, &value);
>  . . .
> 1597   if (result.not_null() && !mh->is_native()) {
> 1598     // We have to restore the oop on the stack for interpreter frames
> 1599     *(oop*)current_frame.interpreter_frame_tos_address() = result();
> 1600   }
> ```
> 
> Probably, extra checks for current_frame.is_interpreted_frame() in these fragments will be sufficient.

That makes sense. Added a check in the latest version that we are in interp only mode.

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

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


More information about the serviceability-dev mailing list