Skip to content

Commit 97706f5

Browse files
committed
fixed failure in runtime/cds/DeterministicDump.java
1 parent e987110 commit 97706f5

File tree

2 files changed

+24
-17
lines changed

2 files changed

+24
-17
lines changed

src/hotspot/share/memory/heapShared.cpp

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,9 @@ void HeapShared::copy_closed_archive_heap_objects(
304304

305305
archive_object_subgraphs(closed_archive_subgraph_entry_fields,
306306
num_closed_archive_subgraph_entry_fields,
307-
true /* is_closed_archive */, THREAD);
307+
true /* is_closed_archive */,
308+
false /* is_full_module_graph */,
309+
THREAD);
308310

309311
G1CollectedHeap::heap()->end_archive_alloc_range(closed_archive,
310312
os::vm_allocation_granularity());
@@ -324,11 +326,13 @@ void HeapShared::copy_open_archive_heap_objects(
324326
archive_object_subgraphs(open_archive_subgraph_entry_fields,
325327
num_open_archive_subgraph_entry_fields,
326328
false /* is_closed_archive */,
329+
false /* is_full_module_graph */,
327330
THREAD);
328331
if (MetaspaceShared::use_full_module_graph()) {
329332
archive_object_subgraphs(fmg_open_archive_subgraph_entry_fields,
330333
num_fmg_open_archive_subgraph_entry_fields,
331334
false /* is_closed_archive */,
335+
true /* is_full_module_graph */,
332336
THREAD);
333337
}
334338

@@ -353,16 +357,18 @@ HeapShared::RunTimeKlassSubGraphInfoTable HeapShared::_run_time_subgraph_info_
353357
KlassSubGraphInfo* HeapShared::init_subgraph_info(Klass* k, bool is_full_module_graph) {
354358
assert(DumpSharedSpaces, "dump time only");
355359
bool created;
360+
Klass* relocated_k = MetaspaceShared::get_relocated_klass(k);
356361
KlassSubGraphInfo* info =
357-
_dump_time_subgraph_info_table->put_if_absent(k, KlassSubGraphInfo(k, is_full_module_graph),
362+
_dump_time_subgraph_info_table->put_if_absent(relocated_k, KlassSubGraphInfo(relocated_k, is_full_module_graph),
358363
&created);
359364
assert(created, "must not initialize twice");
360365
return info;
361366
}
362367

363368
KlassSubGraphInfo* HeapShared::get_subgraph_info(Klass* k) {
364369
assert(DumpSharedSpaces, "dump time only");
365-
KlassSubGraphInfo* info = _dump_time_subgraph_info_table->get(k);
370+
Klass* relocated_k = MetaspaceShared::get_relocated_klass(k);
371+
KlassSubGraphInfo* info = _dump_time_subgraph_info_table->get(relocated_k);
366372
assert(info != NULL, "must have been initialized");
367373
return info;
368374
}
@@ -440,7 +446,7 @@ void KlassSubGraphInfo::add_subgraph_object_klass(Klass* orig_k, Klass *relocate
440446

441447
// Initialize an archived subgraph_info_record from the given KlassSubGraphInfo.
442448
void ArchivedKlassSubGraphInfoRecord::init(KlassSubGraphInfo* info) {
443-
_k = MetaspaceShared::get_relocated_klass(info->klass());
449+
_k = info->klass();
444450
_entry_field_records = NULL;
445451
_subgraph_object_klasses = NULL;
446452
_is_full_module_graph = info->is_full_module_graph();
@@ -491,7 +497,7 @@ struct CopyKlassSubGraphInfoToArchive : StackObj {
491497
(ArchivedKlassSubGraphInfoRecord*)MetaspaceShared::read_only_space_alloc(sizeof(ArchivedKlassSubGraphInfoRecord));
492498
record->init(&info);
493499

494-
unsigned int hash = SystemDictionaryShared::hash_for_shared_dictionary(MetaspaceShared::get_relocated_klass(klass));
500+
unsigned int hash = SystemDictionaryShared::hash_for_shared_dictionary(klass);
495501
u4 delta = MetaspaceShared::object_delta_u4(record);
496502
_writer->add(hash, delta);
497503
}
@@ -974,8 +980,9 @@ void HeapShared::set_has_been_seen_during_subgraph_recording(oop obj) {
974980
++ _num_new_walked_objs;
975981
}
976982

977-
void HeapShared::start_recording_subgraph(InstanceKlass *k, const char* class_name) {
983+
void HeapShared::start_recording_subgraph(InstanceKlass *k, const char* class_name, bool is_full_module_graph) {
978984
log_info(cds, heap)("Start recording subgraph(s) for archived fields in %s", class_name);
985+
init_subgraph_info(k, is_full_module_graph);
979986
init_seen_objects_table();
980987
_num_new_walked_objs = 0;
981988
_num_new_archived_objs = 0;
@@ -1020,8 +1027,7 @@ class ArchivableStaticFieldFinder: public FieldClosure {
10201027
};
10211028

10221029
void HeapShared::init_subgraph_entry_fields(ArchivableStaticFieldInfo fields[],
1023-
int num, bool is_full_module_graph,
1024-
Thread* THREAD) {
1030+
int num, Thread* THREAD) {
10251031
for (int i = 0; i < num; i++) {
10261032
ArchivableStaticFieldInfo* info = &fields[i];
10271033
TempNewSymbol klass_name = SymbolTable::new_symbol(info->klass_name);
@@ -1041,7 +1047,6 @@ void HeapShared::init_subgraph_entry_fields(ArchivableStaticFieldInfo fields[],
10411047

10421048
info->klass = ik;
10431049
info->offset = finder.offset();
1044-
init_subgraph_info(ik, is_full_module_graph);
10451050
}
10461051
}
10471052

@@ -1050,14 +1055,14 @@ void HeapShared::init_subgraph_entry_fields(Thread* THREAD) {
10501055

10511056
init_subgraph_entry_fields(closed_archive_subgraph_entry_fields,
10521057
num_closed_archive_subgraph_entry_fields,
1053-
false, THREAD);
1058+
THREAD);
10541059
init_subgraph_entry_fields(open_archive_subgraph_entry_fields,
10551060
num_open_archive_subgraph_entry_fields,
1056-
false, THREAD);
1061+
THREAD);
10571062
if (MetaspaceShared::use_full_module_graph()) {
10581063
init_subgraph_entry_fields(fmg_open_archive_subgraph_entry_fields,
10591064
num_fmg_open_archive_subgraph_entry_fields,
1060-
true, THREAD);
1065+
THREAD);
10611066
}
10621067
}
10631068

@@ -1068,6 +1073,7 @@ void HeapShared::init_for_dumping(Thread* THREAD) {
10681073

10691074
void HeapShared::archive_object_subgraphs(ArchivableStaticFieldInfo fields[],
10701075
int num, bool is_closed_archive,
1076+
bool is_full_module_graph,
10711077
Thread* THREAD) {
10721078
_num_total_subgraph_recordings = 0;
10731079
_num_total_walked_objs = 0;
@@ -1085,7 +1091,7 @@ void HeapShared::archive_object_subgraphs(ArchivableStaticFieldInfo fields[],
10851091
for (i = 0; i < num; ) {
10861092
ArchivableStaticFieldInfo* info = &fields[i];
10871093
const char* klass_name = info->klass_name;
1088-
start_recording_subgraph(info->klass, klass_name);
1094+
start_recording_subgraph(info->klass, klass_name, is_full_module_graph);
10891095

10901096
// If you have specified consecutive fields of the same klass in
10911097
// fields[], these will be archived in the same
@@ -1099,8 +1105,7 @@ void HeapShared::archive_object_subgraphs(ArchivableStaticFieldInfo fields[],
10991105

11001106
archive_reachable_objects_from_static_field(f->klass, f->klass_name,
11011107
f->offset, f->field_name,
1102-
is_closed_archive,
1103-
CHECK);
1108+
is_closed_archive, CHECK);
11041109
}
11051110
done_recording_subgraph(info->klass, klass_name);
11061111
}

src/hotspot/share/memory/heapShared.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ class HeapShared: AllStatic {
191191
static void archive_object_subgraphs(ArchivableStaticFieldInfo fields[],
192192
int num,
193193
bool is_closed_archive,
194+
bool is_full_module_graph,
194195
Thread* THREAD);
195196

196197
// Archive object sub-graph starting from the given static field
@@ -209,7 +210,7 @@ class HeapShared: AllStatic {
209210
static KlassSubGraphInfo* get_subgraph_info(Klass *k);
210211

211212
static void init_subgraph_entry_fields(ArchivableStaticFieldInfo fields[],
212-
int num, bool is_full_module_graph, Thread* THREAD);
213+
int num, Thread* THREAD);
213214

214215
// Used by decode_from_archive
215216
static address _narrow_oop_base;
@@ -245,7 +246,8 @@ class HeapShared: AllStatic {
245246
static int _num_total_recorded_klasses;
246247
static int _num_total_verifications;
247248

248-
static void start_recording_subgraph(InstanceKlass *k, const char* klass_name);
249+
static void start_recording_subgraph(InstanceKlass *k, const char* klass_name,
250+
bool is_full_module_graph);
249251
static void done_recording_subgraph(InstanceKlass *k, const char* klass_name);
250252

251253
static bool has_been_seen_during_subgraph_recording(oop obj);

0 commit comments

Comments
 (0)