diff options
Diffstat (limited to 'src/compiler_llvm')
| -rw-r--r-- | src/compiler_llvm/runtime_support_llvm.cc | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/compiler_llvm/runtime_support_llvm.cc b/src/compiler_llvm/runtime_support_llvm.cc index e9726f8a7f..0e0500cb55 100644 --- a/src/compiler_llvm/runtime_support_llvm.cc +++ b/src/compiler_llvm/runtime_support_llvm.cc @@ -86,7 +86,16 @@ void art_unlock_object_from_code(Object* obj, Thread* thread) void art_test_suspend_from_code(Thread* thread) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - thread->FullSuspendCheck(); + for (;;) { + if (thread->ReadFlag(kCheckpointRequest)) { + thread->RunCheckpointFunction(); + thread->AtomicClearFlag(kCheckpointRequest); + } else if (thread->ReadFlag(kSuspendRequest)) { + thread->FullSuspendCheck(); + } else { + break; + } + } } ShadowFrame* art_push_shadow_frame_from_code(Thread* thread, ShadowFrame* new_shadow_frame, |