Mercurial > hg > graal-compiler
diff src/share/vm/memory/metaspaceShared.cpp @ 7460:6c3f47d964f3
8003705: CDS failed on Windows: can not map in the CDS.
Summary: Map memory only once to prevent 'already mapped' failures.
Reviewed-by: acorn, zgu
author | hseigel |
---|---|
date | Mon, 07 Jan 2013 15:32:51 -0500 |
parents | 070d523b96a7 |
children | c793367610c1 |
line wrap: on
line diff
--- a/src/share/vm/memory/metaspaceShared.cpp Wed Jan 02 20:28:09 2013 -0500 +++ b/src/share/vm/memory/metaspaceShared.cpp Mon Jan 07 15:32:51 2013 -0500 @@ -689,9 +689,15 @@ bool MetaspaceShared::map_shared_spaces(FileMapInfo* mapinfo) { size_t image_alignment = mapinfo->alignment(); - // Map in the shared memory and then map the regions on top of it +#ifndef _WINDOWS + // Map in the shared memory and then map the regions on top of it. + // On Windows, don't map the memory here because it will cause the + // mappings of the regions to fail. ReservedSpace shared_rs = mapinfo->reserve_shared_memory(); if (!shared_rs.is_reserved()) return false; +#endif + + assert(!DumpSharedSpaces, "Should not be called with DumpSharedSpaces"); // Map each shared region if ((_ro_base = mapinfo->map_region(ro)) != NULL && @@ -708,8 +714,10 @@ if (_rw_base != NULL) mapinfo->unmap_region(rw); if (_md_base != NULL) mapinfo->unmap_region(md); if (_mc_base != NULL) mapinfo->unmap_region(mc); +#ifndef _WINDOWS // Release the entire mapped region shared_rs.release(); +#endif // If -Xshare:on is specified, print out the error message and exit VM, // otherwise, set UseSharedSpaces to false and continue. if (RequireSharedSpaces) {