RFR[13]: 8224674: NMethod state machine is not monotonic
Erik Österlund
erik.osterlund at oracle.com
Wed Jul 17 16:59:55 UTC 2019
Hi Dean,
You are correct that the winner of the race will already have made sure
the operations you listed have run. So by not returning you would
essentially just continue performing a bunch of unnecessary operations
that won't do anything.
I would prefer though to stay as close to my original fix as possible as
that one has gone through extensive testing, and I would like to push
this before the cut-off for P3 bugs to 13 tomorrow.
Here is my latest attempt:
http://cr.openjdk.java.net/~eosterlund/8224674/webrev.03/
Here is an incremental webrev to the original proposition:
http://cr.openjdk.java.net/~eosterlund/8224674/webrev.00_03/
As you can see I have only changed the guarantee to assert as requested
by Coleen, and added a bunch of commentary to explain why e.g. a failing
transition does not need to worry about the 3 side effects before the
failure. Hope my comments make sense.
I hope you think this is okay. If there is more clarification or
cleanups you would like to see, I am more than happy to file such RFEs
for 14.
Thanks,
/Erik
On 2019-07-17 09:17, dean.long at oracle.com wrote:
> On 7/16/19 10:51 AM, dean.long at oracle.com wrote:
>> Back to the make_not_entrant / make_unloaded race. If
>> make_not_entrant bails out half-way through because make_unloaded won
>> the race, doesn't that mean that make_unloaded needs to have already
>> done all the work that make_not_entrant is not doing?
>> unlink_from_method, invalidate_nmethod_mirror, remove_osr_nmethod,
>> unregister_nmethod, etc.
>
> What I'm thinking is, what happens if instead of this:
>
> 1365 // Change state
> 1366 if (!try_transition(state)) {
> 1367 return false;
> 1368 }
> we do this: 1365 // Maybe change state
> 1366 if (!try_transition(state)) {
> 1367 // fall through 1368 }
>
> dl
>
More information about the hotspot-dev
mailing list