RFR: 8246442: nmethod::can_convert_to_zombie() asserts when not called by the sweeper
Daniel D. Daugherty
daniel.daugherty at oracle.com
Wed Jun 3 13:31:14 UTC 2020
On 6/3/20 7:26 AM, Erik Österlund wrote:
> Hi,
>
> nmethod::can_convert_to_zombie() used to be called only by the
> sweeper, after it has checked that
> an nmethod is not entrant. Due to the single call site, there was an
> assert checking that the nmethod
> should be not entrant (the condition just checked).
> However, it is now used in nmethod::post_compiled_method_load_event(),
> where the result of the assert is racy.
>
> When an nmethod is created, the load event will never be able to see
> the nmethod spuriously flipping
> to zombie, because there simply are no safepoint polls/transitions
> between the nmethod being created
> and the load event firing. However, the jvmti_GenerateEvents can
> observe such spurious flips to zombie.
> It is completely harmless, because the whole operation runs under the
> CodeCache_lock, which prevents
> further nmethods from being flushed. But they can flip to zombie,
> which is indeed exactly what the
> check is design to test. Therefore, this is just a false positive
> assertion failure.
>
> Proposed fix: make the assert only apply when called from the sweeper
> thread.
>
> Webrev:
> http://cr.openjdk.java.net/~eosterlund/8246442/webrev.00/
src/hotspot/share/code/nmethod.cpp
No comments.
Thumbs up.
I think Leonid filed a similar bug the other day:
JDK-8245877 assert(_value != __null) failed: resolving NULL _value in
JvmtiExport::post_compiled_method_load
so I've added Serguei to this review thread since JDK-8245877
is assigned to him.
Dan
>
> Bug:
> https://bugs.openjdk.java.net/browse/JDK-8246442
>
> Thanks,
> /Erik
More information about the hotspot-dev
mailing list