Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/hotspot/share/runtime/handshake.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -521,7 +521,7 @@ HandshakeOperation* HandshakeState::get_op_for_self(bool allow_suspend, bool che
assert(_lock.owned_by_self(), "Lock must be held");
assert(allow_suspend || !check_async_exception, "invalid case");
#if INCLUDE_JVMTI
if (allow_suspend && _handshakee->is_disable_suspend()) {
if (allow_suspend && (_handshakee->is_disable_suspend() || _handshakee->is_vthread_transition_disabler())) {
// filter out suspend operations while JavaThread is in disable_suspend mode
allow_suspend = false;
}
Expand Down
4 changes: 2 additions & 2 deletions src/hotspot/share/runtime/javaThread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -499,7 +499,7 @@ JavaThread::JavaThread(MemTag mem_tag) :
_suspend_resume_manager(this, &_handshake._lock),

_is_in_vthread_transition(false),
DEBUG_ONLY(_is_vthread_transition_disabler(false) COMMA)
_is_vthread_transition_disabler(false),
DEBUG_ONLY(_is_disabler_at_start(false) COMMA)

_popframe_preserved_args(nullptr),
Expand Down Expand Up @@ -1161,11 +1161,11 @@ void JavaThread::set_is_in_vthread_transition(bool val) {
AtomicAccess::store(&_is_in_vthread_transition, val);
}

#ifdef ASSERT
void JavaThread::set_is_vthread_transition_disabler(bool val) {
_is_vthread_transition_disabler = val;
}

#ifdef ASSERT
void JavaThread::set_is_disabler_at_start(bool val) {
_is_disabler_at_start = val;
}
Expand Down
4 changes: 2 additions & 2 deletions src/hotspot/share/runtime/javaThread.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -734,14 +734,14 @@ class JavaThread: public Thread {

private:
bool _is_in_vthread_transition; // thread is in virtual thread mount state transition
DEBUG_ONLY(bool _is_vthread_transition_disabler;) // thread currently disabled vthread transitions
bool _is_vthread_transition_disabler; // thread currently disabled vthread transitions
DEBUG_ONLY(bool _is_disabler_at_start;) // thread at process of disabling vthread transitions
public:
bool is_in_vthread_transition() const;
void set_is_in_vthread_transition(bool val);
#ifdef ASSERT
bool is_vthread_transition_disabler() const { return _is_vthread_transition_disabler; }
void set_is_vthread_transition_disabler(bool val);
#ifdef ASSERT
bool is_disabler_at_start() const { return _is_disabler_at_start; }
void set_is_disabler_at_start(bool val);
#endif
Expand Down
10 changes: 5 additions & 5 deletions src/hotspot/share/runtime/mountUnmountDisabler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -286,13 +286,13 @@ MountUnmountDisabler::disable_transition_for_one() {
// carrierThread to float up.
// This pairs with the release barrier in end_transition().
OrderAccess::acquire();
DEBUG_ONLY(JavaThread::current()->set_is_vthread_transition_disabler(true);)
JavaThread::current()->set_is_vthread_transition_disabler(true);
}

// disable transitions for all virtual threads
void
MountUnmountDisabler::disable_transition_for_all() {
DEBUG_ONLY(JavaThread* thread = JavaThread::current();)
JavaThread* thread = JavaThread::current();
DEBUG_ONLY(thread->set_is_disabler_at_start(true);)

MonitorLocker ml(VThreadTransition_lock);
Expand Down Expand Up @@ -327,7 +327,7 @@ MountUnmountDisabler::disable_transition_for_all() {
// carrierThread to float up.
// This pairs with the release barrier in end_transition().
OrderAccess::acquire();
DEBUG_ONLY(thread->set_is_vthread_transition_disabler(true);)
thread->set_is_vthread_transition_disabler(true);
DEBUG_ONLY(thread->set_is_disabler_at_start(false);)
}

Expand All @@ -350,7 +350,7 @@ MountUnmountDisabler::enable_transition_for_one() {
if (java_lang_Thread::vthread_transition_disable_count(_vthread()) == 0) {
ml.notify_all();
}
DEBUG_ONLY(JavaThread::current()->set_is_vthread_transition_disabler(false);)
JavaThread::current()->set_is_vthread_transition_disabler(false);
}

// enable transitions for all virtual threads
Expand All @@ -376,7 +376,7 @@ MountUnmountDisabler::enable_transition_for_all() {
if (global_vthread_transition_disable_count() == base_disable_count || _is_exclusive) {
ml.notify_all();
}
DEBUG_ONLY(thread->set_is_vthread_transition_disabler(false);)
thread->set_is_vthread_transition_disabler(false);
}

int MountUnmountDisabler::global_vthread_transition_disable_count() {
Expand Down