Mercurial > hg > graal-compiler
comparison 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 |
comparison
equal
deleted
inserted
replaced
7459:cc6a617fffd2 | 7460:6c3f47d964f3 |
---|---|
687 // Need to keep the bounds of the ro and rw space for the Metaspace::contains | 687 // Need to keep the bounds of the ro and rw space for the Metaspace::contains |
688 // call, or is_in_shared_space. | 688 // call, or is_in_shared_space. |
689 bool MetaspaceShared::map_shared_spaces(FileMapInfo* mapinfo) { | 689 bool MetaspaceShared::map_shared_spaces(FileMapInfo* mapinfo) { |
690 size_t image_alignment = mapinfo->alignment(); | 690 size_t image_alignment = mapinfo->alignment(); |
691 | 691 |
692 // Map in the shared memory and then map the regions on top of it | 692 #ifndef _WINDOWS |
693 // Map in the shared memory and then map the regions on top of it. | |
694 // On Windows, don't map the memory here because it will cause the | |
695 // mappings of the regions to fail. | |
693 ReservedSpace shared_rs = mapinfo->reserve_shared_memory(); | 696 ReservedSpace shared_rs = mapinfo->reserve_shared_memory(); |
694 if (!shared_rs.is_reserved()) return false; | 697 if (!shared_rs.is_reserved()) return false; |
698 #endif | |
699 | |
700 assert(!DumpSharedSpaces, "Should not be called with DumpSharedSpaces"); | |
695 | 701 |
696 // Map each shared region | 702 // Map each shared region |
697 if ((_ro_base = mapinfo->map_region(ro)) != NULL && | 703 if ((_ro_base = mapinfo->map_region(ro)) != NULL && |
698 (_rw_base = mapinfo->map_region(rw)) != NULL && | 704 (_rw_base = mapinfo->map_region(rw)) != NULL && |
699 (_md_base = mapinfo->map_region(md)) != NULL && | 705 (_md_base = mapinfo->map_region(md)) != NULL && |
706 // that succeeded | 712 // that succeeded |
707 if (_ro_base != NULL) mapinfo->unmap_region(ro); | 713 if (_ro_base != NULL) mapinfo->unmap_region(ro); |
708 if (_rw_base != NULL) mapinfo->unmap_region(rw); | 714 if (_rw_base != NULL) mapinfo->unmap_region(rw); |
709 if (_md_base != NULL) mapinfo->unmap_region(md); | 715 if (_md_base != NULL) mapinfo->unmap_region(md); |
710 if (_mc_base != NULL) mapinfo->unmap_region(mc); | 716 if (_mc_base != NULL) mapinfo->unmap_region(mc); |
717 #ifndef _WINDOWS | |
711 // Release the entire mapped region | 718 // Release the entire mapped region |
712 shared_rs.release(); | 719 shared_rs.release(); |
720 #endif | |
713 // If -Xshare:on is specified, print out the error message and exit VM, | 721 // If -Xshare:on is specified, print out the error message and exit VM, |
714 // otherwise, set UseSharedSpaces to false and continue. | 722 // otherwise, set UseSharedSpaces to false and continue. |
715 if (RequireSharedSpaces) { | 723 if (RequireSharedSpaces) { |
716 vm_exit_during_initialization("Unable to use shared archive.", NULL); | 724 vm_exit_during_initialization("Unable to use shared archive.", NULL); |
717 } else { | 725 } else { |