RFR(one-liner): 8231321: compiler/codecache/stress/UnexpectedDeoptimizationAllTest.java failed assertion
Tobias Hartmann
tobias.hartmann at oracle.com
Wed Sep 25 08:58:24 UTC 2019
Hi Robbin,
please note that we also hit the following assert (see comments in bug report):
Crash: Internal Error ...nmethod.cpp...assert(!found) failed: osr nmethod should have been invalidated
Thanks,
Tobias
On 25.09.19 10:12, Robbin Ehn wrote:
> Hi all, please review.
>
> We no longer allow state to ever go backwards.
> So trying to make a zombie not-entrant is fine.
> What happens is something like:
> - make not-entrant
> - safepoint
> - deopt all => start iteration over nmethods
> - picks up this not-entrant method, since it is alive
> - sweeper turns it into a zombie
> - we try making the nmethod not-entrant once more => assert
>
> If we remove the assert the method would just returns false instead, which is expected.
>
> Thanks, Robbin
>
> Issue:
> https://bugs.openjdk.java.net/browse/JDK-8231321
>
> Changeset:
> diff -r 448fe2bfd505 src/hotspot/share/code/nmethod.cpp
> --- a/src/hotspot/share/code/nmethod.cpp Tue Sep 24 08:54:39 2019 +0200
> +++ b/src/hotspot/share/code/nmethod.cpp Wed Sep 25 10:02:45 2019 +0200
> @@ -1288,17 +1288,16 @@
> }
> }
>
> /**
> * Common functionality for both make_not_entrant and make_zombie
> */
> bool nmethod::make_not_entrant_or_zombie(int state) {
> assert(state == zombie || state == not_entrant, "must be zombie or not_entrant");
> - assert(!is_zombie(), "should not already be a zombie");
>
> if (Atomic::load(&_state) >= state) {
> // Avoid taking the lock if already in required state.
> // This is safe from races because the state is an end-state,
> // which the nmethod cannot back out of once entered.
> // No need for fencing either.
> return false;
> }
More information about the hotspot-compiler-dev
mailing list