summaryrefslogtreecommitdiff
path: root/openjdkjvmti/deopt_manager.h
diff options
context:
space:
mode:
author Alex Light <allight@google.com> 2019-04-18 09:17:10 -0700
committer Alex Light <allight@google.com> 2019-04-23 18:15:06 +0000
commita4cdd36ba332b63ccaae8416f68d3ac98d7dd68f (patch)
tree7224dda71c3fd35959b0f968f5478af4f92a145d /openjdkjvmti/deopt_manager.h
parent4160c12d4e93dd7a9da68a82f63cff4c23fb5c17 (diff)
Prevent concurrent GC stack-walks during deoptimization
We could end up modifying the instrumentation stack at the same time the GC or thread-flip stack walks are occurring. This could cause crashes or check-failures as the stack is in an inconsistent state. To fix this we changed the deoptimization process to block GC stack walks. We also standardized openjdkjvmti.so deoptimization to use a single entrypoint. Bug: 72608560 Test: ./test.py --host Test: ./tools/parallel_run.py Change-Id: I942ff891930d22a579345265897916cf84842a1c
Diffstat (limited to 'openjdkjvmti/deopt_manager.h')
-rw-r--r--openjdkjvmti/deopt_manager.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/openjdkjvmti/deopt_manager.h b/openjdkjvmti/deopt_manager.h
index 73a64be7a4..9789c5ed91 100644
--- a/openjdkjvmti/deopt_manager.h
+++ b/openjdkjvmti/deopt_manager.h
@@ -112,7 +112,9 @@ class DeoptManager {
REQUIRES(!deoptimization_status_lock_, !art::Roles::uninterruptible_)
REQUIRES_SHARED(art::Locks::mutator_lock_);
- void DeoptimizeThread(art::Thread* target) REQUIRES_SHARED(art::Locks::mutator_lock_);
+ void DeoptimizeThread(art::Thread* target)
+ REQUIRES(!art::Locks::thread_list_lock_)
+ REQUIRES_SHARED(art::Locks::mutator_lock_);
void DeoptimizeAllThreads() REQUIRES_SHARED(art::Locks::mutator_lock_);
void FinishSetup()