mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 23:04:50 +02:00
7173959: Jvm crashed during coherence exabus (tmb) testing
Mapping of aligned memory needs to be MT safe. Also reviewed by: vitalyd@gmail.com Reviewed-by: dholmes, coleenp, zgu
This commit is contained in:
parent
73843e1140
commit
a3355065be
4 changed files with 74 additions and 13 deletions
|
@ -329,20 +329,9 @@ void ReservedSpace::initialize(size_t size, size_t alignment, bool large,
|
|||
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)) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue