--- old/src/hotspot/share/memory/filemap.cpp 2020-02-18 21:52:46.717120861 +0100 +++ new/src/hotspot/share/memory/filemap.cpp 2020-02-18 21:52:46.513118108 +0100 @@ -1744,10 +1744,18 @@ assert(open_archive_heap_ranges == NULL && num_open_archive_heap_ranges == 0, "sanity"); } } - + bool FileMapInfo::map_heap_data(MemRegion **heap_mem, int first, int max, int* num, bool is_open_archive) { MemRegion* regions = MemRegion::create_array(max, mtInternal); + + struct Cleanup { + MemRegion* _regions; + bool _aborted; + Cleanup(MemRegion* regions) : _regions(regions), _aborted(true) { } + ~Cleanup() { if (_aborted) { FREE_C_HEAP_ARRAY(MemRegion, _regions); } } + } cleanup(regions); + FileMapRegion* si; int region_num = 0; @@ -1807,6 +1815,7 @@ } } + cleanup._aborted = false; // the shared heap data is mapped successfully *heap_mem = regions; *num = region_num;