review (XS) for 6956958: assert(is_clean() || is_call_to_compiled() || is_call_to_interpreted() || is_optimized() || is_megam
Tom Rodriguez
tom.rodriguez at oracle.com
Fri Jun 18 11:50:48 PDT 2010
http://cr.openjdk.java.net/~never/6956958
6956958: assert(is_clean() || is_call_to_compiled() || is_call_to_interpreted() || is_optimized() || is_megam
Reviewed-by:
When the sweeper scans the code cache it divides it up into
NMethodSweepFraction chunks and processes one chunk per sweep. Some
changes late in the review of the concurrent sweeper changed the
interation to skip by nmethods instead of CodeBlobs and during a
change late in the review some code which was only supposed to make
sure we had stopped on an nmethod was changed into skipping to the
next nmethod. This meant that sweeper skipped processing the last
nmethod of each chunk. Each nmethod is processed multiple times so
most of the time this was fine but occasionally the stars aligned and
the same nmethod was skipped every time. This could leave it pointing
at a dead nmethod which could cause failures of the sort we were
seeing. Logging code I added for a debug build showed precisely these
events occurring when the crash happened. The fix is simply to remove
the extra call to next.
While investigating this I found several other issues that are
potential problems but they all appeared pretty benign. I'm going to
fix those issues another another bug since they are somewhat larger
changes.
src/share/vm/runtime/sweeper.hpp
src/share/vm/runtime/sweeper.cpp
More information about the hotspot-compiler-dev
mailing list