From af9a57fd69b2ff0f20e12a531603d875e7456892 Mon Sep 17 00:00:00 2001 From: Andrei Pangin Date: Wed, 27 Mar 2024 00:30:05 +0000 Subject: [PATCH 1/2] 8329103: assert(!thread->in_asgct()) failed during multi-mode profiling --- src/hotspot/share/runtime/thread.hpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/hotspot/share/runtime/thread.hpp b/src/hotspot/share/runtime/thread.hpp index 7461876f37846..db1ed3a974a62 100644 --- a/src/hotspot/share/runtime/thread.hpp +++ b/src/hotspot/share/runtime/thread.hpp @@ -657,15 +657,17 @@ class Thread: public ThreadShadow { class ThreadInAsgct { private: Thread* _thread; + bool _saved_in_asgct; public: ThreadInAsgct(Thread* thread) : _thread(thread) { assert(thread != nullptr, "invariant"); - assert(!thread->in_asgct(), "invariant"); + // AsyncGetCallTrace is reentrant - save the previous state. + _saved_in_asgct = thread->in_asgct(); thread->set_in_asgct(true); } ~ThreadInAsgct() { assert(_thread->in_asgct(), "invariant"); - _thread->set_in_asgct(false); + _thread->set_in_asgct(_saved_in_asgct); } }; From fc5a4831522b379e23e777ebf7b186570a2b4d3b Mon Sep 17 00:00:00 2001 From: Andrei Pangin <1749416+apangin@users.noreply.github.com> Date: Fri, 29 Mar 2024 11:31:12 +0000 Subject: [PATCH 2/2] Rephrased comment about AsyncGetCallTrace reentrancy --- src/hotspot/share/runtime/thread.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hotspot/share/runtime/thread.hpp b/src/hotspot/share/runtime/thread.hpp index db1ed3a974a62..32f7b7fa8ec72 100644 --- a/src/hotspot/share/runtime/thread.hpp +++ b/src/hotspot/share/runtime/thread.hpp @@ -661,7 +661,7 @@ class ThreadInAsgct { public: ThreadInAsgct(Thread* thread) : _thread(thread) { assert(thread != nullptr, "invariant"); - // AsyncGetCallTrace is reentrant - save the previous state. + // Allow AsyncGetCallTrace to be reentrant - save the previous state. _saved_in_asgct = thread->in_asgct(); thread->set_in_asgct(true); }