--- a/src/hotspot/share/services/heapDumper.cpp Fri Aug 31 12:41:00 2018 +0200
+++ b/src/hotspot/share/services/heapDumper.cpp Fri Aug 31 07:03:46 2018 -0400
@@ -1464,6 +1464,7 @@
bool skip_operation() const;
// writes a HPROF_LOAD_CLASS record
+ class ClassesDo;
static void do_load_class(Klass* k);
// writes a HPROF_GC_CLASS_DUMP record for the given class
@@ -1821,7 +1822,10 @@
SymbolTable::symbols_do(&sym_dumper);
// write HPROF_LOAD_CLASS records
- ClassLoaderDataGraph::classes_do(&do_load_class);
+ {
+ LockedClassesDo locked_load_classes(&do_load_class);
+ ClassLoaderDataGraph::classes_do(&locked_load_classes);
+ }
Universe::basic_type_classes_do(&do_load_class);
// write HPROF_FRAME and HPROF_TRACE records
@@ -1832,7 +1836,10 @@
DumperSupport::write_dump_header(writer());
// Writes HPROF_GC_CLASS_DUMP records
- ClassLoaderDataGraph::classes_do(&do_class_dump);
+ {
+ LockedClassesDo locked_dump_class(&do_class_dump);
+ ClassLoaderDataGraph::classes_do(&locked_dump_class);
+ }
Universe::basic_type_classes_do(&do_basic_type_array_class_dump);
check_segment_length();