Skip to content
Permalink
Browse files
8260704: ParallelGC: oldgen expansion needs release-store for _end
Move JDK-8257999 barrier to correct location.

Reviewed-by: tschatzl, sjohanss
  • Loading branch information
Kim Barrett committed Feb 2, 2021
1 parent 081fa3e commit afd5eefdae388a53a0d6bffc2cf94b878ac1881e
Showing with 10 additions and 7 deletions.
  1. +6 −2 src/hotspot/share/gc/parallel/mutableSpace.cpp
  2. +4 −5 src/hotspot/share/gc/parallel/psOldGen.cpp
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2001, 2020, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 2021, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -126,7 +126,11 @@ void MutableSpace::initialize(MemRegion mr,
}

set_bottom(mr.start());
set_end(mr.end());
// When expanding concurrently with callers of cas_allocate, setting end
// makes the new space available for allocation by other threads. So this
// assignment must follow all other configuration and initialization that
// might be done for expansion.
Atomic::release_store(end_addr(), mr.end());

if (clear_space) {
clear(mangle_space);
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2001, 2020, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 2021, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -35,7 +35,6 @@
#include "logging/log.hpp"
#include "oops/oop.inline.hpp"
#include "runtime/java.hpp"
#include "runtime/orderAccess.hpp"
#include "utilities/align.hpp"

PSOldGen::PSOldGen(ReservedSpace rs, size_t initial_size, size_t min_size,
@@ -381,9 +380,9 @@ void PSOldGen::post_resize() {
WorkGang* workers = Thread::current()->is_VM_thread() ?
&ParallelScavengeHeap::heap()->workers() : NULL;

// Ensure the space bounds are updated and made visible to other
// threads after the other data structures have been resized.
OrderAccess::storestore();
// The update of the space's end is done by this call. As that
// makes the new space available for concurrent allocation, this
// must be the last step when expanding.
object_space()->initialize(new_memregion,
SpaceDecorator::DontClear,
SpaceDecorator::DontMangle,

0 comments on commit afd5eef

Please sign in to comment.