diff options
author | 2019-04-18 09:17:10 -0700 | |
---|---|---|
committer | 2019-04-23 18:15:06 +0000 | |
commit | a4cdd36ba332b63ccaae8416f68d3ac98d7dd68f (patch) | |
tree | 7224dda71c3fd35959b0f968f5478af4f92a145d /openjdkjvmti/deopt_manager.h | |
parent | 4160c12d4e93dd7a9da68a82f63cff4c23fb5c17 (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.h | 4 |
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() |