diff options
Diffstat (limited to 'runtime/thread.h')
| -rw-r--r-- | runtime/thread.h | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/runtime/thread.h b/runtime/thread.h index b01ec945de..30c7e8ff86 100644 --- a/runtime/thread.h +++ b/runtime/thread.h @@ -133,9 +133,19 @@ class PACKED(4) Thread { SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); ThreadState GetState() const { + DCHECK(state_and_flags_.as_struct.state >= kTerminated && state_and_flags_.as_struct.state <= kSuspended); return static_cast<ThreadState>(state_and_flags_.as_struct.state); } + // This function can be used to make sure a thread's state is valid. + void CheckState(int id) const { + if (state_and_flags_.as_struct.state >= kTerminated && state_and_flags_.as_struct.state <= kSuspended) { + return; + } + LOG(INFO) << "Thread " << this << " state is invalid: " << state_and_flags_.as_struct.state << " id=" << id; + CHECK(false); + } + ThreadState SetState(ThreadState new_state); int GetSuspendCount() const EXCLUSIVE_LOCKS_REQUIRED(Locks::thread_suspend_count_lock_) { @@ -780,9 +790,12 @@ class PACKED(4) Thread { // Cause for last suspension. const char* last_no_thread_suspension_cause_; + // Maximum number of checkpoint functions. + static constexpr uint32_t kMaxCheckpoints = 3; + // Pending checkpoint function or NULL if non-pending. Installation guarding by // Locks::thread_suspend_count_lock_. - Closure* checkpoint_function_; + Closure* checkpoint_functions_[kMaxCheckpoints]; public: // Entrypoint function pointers |