summaryrefslogtreecommitdiffstats
path: root/runtime/gc/task_processor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/gc/task_processor.cc')
-rw-r--r--runtime/gc/task_processor.cc10
1 files changed, 9 insertions, 1 deletions
diff --git a/runtime/gc/task_processor.cc b/runtime/gc/task_processor.cc
index 2ca4b3f922..ef34c68cc4 100644
--- a/runtime/gc/task_processor.cc
+++ b/runtime/gc/task_processor.cc
@@ -22,7 +22,8 @@ namespace art {
namespace gc {
TaskProcessor::TaskProcessor()
- : lock_(new Mutex("Task processor lock", kReferenceProcessorLock)), is_running_(false) {
+ : lock_(new Mutex("Task processor lock", kReferenceProcessorLock)), is_running_(false),
+ running_thread_(nullptr) {
// Piggyback off the reference processor lock level.
cond_.reset(new ConditionVariable("Task processor condition", *lock_));
}
@@ -96,15 +97,22 @@ bool TaskProcessor::IsRunning() const {
return is_running_;
}
+Thread* TaskProcessor::GetRunningThread() const {
+ MutexLock mu(Thread::Current(), *lock_);
+ return running_thread_;
+}
+
void TaskProcessor::Stop(Thread* self) {
MutexLock mu(self, *lock_);
is_running_ = false;
+ running_thread_ = nullptr;
cond_->Broadcast(self);
}
void TaskProcessor::Start(Thread* self) {
MutexLock mu(self, *lock_);
is_running_ = true;
+ running_thread_ = self;
}
void TaskProcessor::RunAllTasks(Thread* self) {