< prev index next >
src/hotspot/share/memory/filemap.cpp
Print this page
rev 52634 : 8214118: HeapRegions marked as archive even if CDS mapping fails
Reviewed-by:
*** 1094,1114 ****
char* base = os::map_memory(_fd, _full_path, si->_file_offset,
addr, regions[i].byte_size(), si->_read_only,
si->_allow_exec);
if (base == NULL || base != addr) {
// dealloc the regions from java heap
! dealloc_archive_heap_regions(regions, region_num);
log_info(cds)("UseSharedSpaces: Unable to map at required address in java heap. "
INTPTR_FORMAT ", size = " SIZE_FORMAT " bytes",
p2i(addr), regions[i].byte_size());
return false;
}
}
if (!verify_mapped_heap_regions(first, region_num)) {
// dealloc the regions from java heap
! dealloc_archive_heap_regions(regions, region_num);
log_info(cds)("UseSharedSpaces: mapped heap regions are corrupt");
return false;
}
// the shared heap data is mapped successfully
--- 1094,1114 ----
char* base = os::map_memory(_fd, _full_path, si->_file_offset,
addr, regions[i].byte_size(), si->_read_only,
si->_allow_exec);
if (base == NULL || base != addr) {
// dealloc the regions from java heap
! dealloc_archive_heap_regions(regions, region_num, is_open_archive);
log_info(cds)("UseSharedSpaces: Unable to map at required address in java heap. "
INTPTR_FORMAT ", size = " SIZE_FORMAT " bytes",
p2i(addr), regions[i].byte_size());
return false;
}
}
if (!verify_mapped_heap_regions(first, region_num)) {
// dealloc the regions from java heap
! dealloc_archive_heap_regions(regions, region_num, is_open_archive);
log_info(cds)("UseSharedSpaces: mapped heap regions are corrupt");
return false;
}
// the shared heap data is mapped successfully
*** 1169,1182 ****
num_open_archive_heap_ranges);
}
}
// dealloc the archive regions from java heap
! void FileMapInfo::dealloc_archive_heap_regions(MemRegion* regions, int num) {
if (num > 0) {
assert(regions != NULL, "Null archive ranges array with non-zero count");
! G1CollectedHeap::heap()->dealloc_archive_regions(regions, num);
}
}
#endif // INCLUDE_CDS_JAVA_HEAP
bool FileMapInfo::verify_region_checksum(int i) {
--- 1169,1182 ----
num_open_archive_heap_ranges);
}
}
// dealloc the archive regions from java heap
! void FileMapInfo::dealloc_archive_heap_regions(MemRegion* regions, int num, bool is_open) {
if (num > 0) {
assert(regions != NULL, "Null archive ranges array with non-zero count");
! G1CollectedHeap::heap()->dealloc_archive_regions(regions, num, is_open);
}
}
#endif // INCLUDE_CDS_JAVA_HEAP
bool FileMapInfo::verify_region_checksum(int i) {
*** 1426,1437 ****
}
}
// Dealloc the archive heap regions only without unmapping. The regions are part
// of the java heap. Unmapping of the heap regions are managed by GC.
map_info->dealloc_archive_heap_regions(open_archive_heap_ranges,
! num_open_archive_heap_ranges);
map_info->dealloc_archive_heap_regions(closed_archive_heap_ranges,
! num_closed_archive_heap_ranges);
} else if (DumpSharedSpaces) {
fail_stop("%s", msg);
}
}
--- 1426,1439 ----
}
}
// Dealloc the archive heap regions only without unmapping. The regions are part
// of the java heap. Unmapping of the heap regions are managed by GC.
map_info->dealloc_archive_heap_regions(open_archive_heap_ranges,
! num_open_archive_heap_ranges,
! true);
map_info->dealloc_archive_heap_regions(closed_archive_heap_ranges,
! num_closed_archive_heap_ranges,
! false);
} else if (DumpSharedSpaces) {
fail_stop("%s", msg);
}
}
< prev index next >