mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-17 09:34:38 +02:00
8255243: Reinforce escape barrier interactions with ZGC conc stack processing
Co-authored-by: Richard Reingruber <rrich@openjdk.org> Reviewed-by: rrich, sspitsyn
This commit is contained in:
parent
faf23de54d
commit
5b185585e8
15 changed files with 196 additions and 104 deletions
|
@ -163,7 +163,8 @@ StackWatermark::StackWatermark(JavaThread* jt, StackWatermarkKind kind, uint32_t
|
|||
_jt(jt),
|
||||
_iterator(NULL),
|
||||
_lock(Mutex::tty - 1, "stack_watermark_lock", true, Mutex::_safepoint_check_never),
|
||||
_kind(kind) {
|
||||
_kind(kind),
|
||||
_linked_watermark(NULL) {
|
||||
}
|
||||
|
||||
StackWatermark::~StackWatermark() {
|
||||
|
@ -247,6 +248,11 @@ void StackWatermark::process_one() {
|
|||
}
|
||||
}
|
||||
|
||||
void StackWatermark::link_watermark(StackWatermark* watermark) {
|
||||
assert(watermark == NULL || _linked_watermark == NULL, "nesting not supported");
|
||||
_linked_watermark = watermark;
|
||||
}
|
||||
|
||||
uintptr_t StackWatermark::watermark() {
|
||||
return Atomic::load_acquire(&_watermark);
|
||||
}
|
||||
|
@ -280,6 +286,14 @@ bool StackWatermark::processing_completed_acquire() const {
|
|||
return processing_completed(Atomic::load_acquire(&_state));
|
||||
}
|
||||
|
||||
void StackWatermark::on_safepoint() {
|
||||
start_processing();
|
||||
StackWatermark* linked_watermark = _linked_watermark;
|
||||
if (linked_watermark != NULL) {
|
||||
linked_watermark->finish_processing(NULL /* context */);
|
||||
}
|
||||
}
|
||||
|
||||
void StackWatermark::start_processing() {
|
||||
if (!processing_started_acquire()) {
|
||||
MutexLocker ml(&_lock, Mutex::_no_safepoint_check_flag);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue