Mercurial > hg > graal-jvmci-8
diff src/share/vm/runtime/virtualspace.cpp @ 7433:730cc4ddd550
7173959: Jvm crashed during coherence exabus (tmb) testing
Summary: Mapping of aligned memory needs to be MT safe. Also reviewed by: vitalyd@gmail.com
Reviewed-by: dholmes, coleenp, zgu
author | brutisso |
---|---|
date | Mon, 17 Dec 2012 08:49:20 +0100 |
parents | da91efe96a93 |
children | 203f64878aab |
line wrap: on
line diff
--- a/src/share/vm/runtime/virtualspace.cpp Wed Dec 12 12:07:32 2012 -0800 +++ b/src/share/vm/runtime/virtualspace.cpp Mon Dec 17 08:49:20 2012 +0100 @@ -329,20 +329,9 @@ if ((((size_t)base + noaccess_prefix) & (alignment - 1)) != 0) { // Base not aligned, retry if (!os::release_memory(base, size)) fatal("os::release_memory failed"); - // Reserve size large enough to do manual alignment and - // increase size to a multiple of the desired alignment + // Make sure that size is aligned size = align_size_up(size, alignment); - size_t extra_size = size + alignment; - do { - char* extra_base = os::reserve_memory(extra_size, NULL, alignment); - if (extra_base == NULL) return; - // Do manual alignement - base = (char*) align_size_up((uintptr_t) extra_base, alignment); - assert(base >= extra_base, "just checking"); - // Re-reserve the region at the aligned base address. - os::release_memory(extra_base, extra_size); - base = os::reserve_memory(size, base); - } while (base == NULL); + base = os::reserve_memory_aligned(size, alignment); if (requested_address != 0 && failed_to_reserve_as_requested(base, requested_address, size, false)) {