From 52e294b9a570086a2bfaf03e5c5c98b37d79d9da Mon Sep 17 00:00:00 2001 From: Nischal Sheth Date: Wed, 2 Mar 2016 17:14:06 -0800 Subject: [PATCH] Don't keep TaskScheduler busy when DBPartition is disabled Change-Id: I8bf3caee87dc5914bebedcfd6569ee730acfea24 Partial-Bug: 1548570 --- src/db/db_partition.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/db/db_partition.cc b/src/db/db_partition.cc index 93e92e5a885..2e5790c9a4f 100644 --- a/src/db/db_partition.cc +++ b/src/db/db_partition.cc @@ -148,7 +148,12 @@ bool DBPartition::IsDBQueueEmpty() const { } void DBPartition::SetQueueDisable(bool disable) { - work_queue_->set_disable(disable); + if (disable) { + work_queue_->set_disable(true); + } else { + work_queue_->set_disable(false); + work_queue_->MaybeStartRunner(); + } } class DBPartition::QueueRunner : public Task { @@ -162,10 +167,9 @@ class DBPartition::QueueRunner : public Task { virtual bool Run() { int count = 0; - // - // Skip if the queue is disabled from running - // - if (queue_->disable()) return false; + // Skip if the queue is disabled. + if (queue_->disable()) + return queue_->RunnerDone(); RemoveQueueEntry *rm_entry = NULL; while (queue_->DequeueRemove(&rm_entry)) { @@ -228,7 +232,7 @@ void DBPartition::WorkQueue::MaybeStartRunner() { bool DBPartition::WorkQueue::RunnerDone() { tbb::mutex::scoped_lock lock(mutex_); - if (request_queue_.empty() && remove_queue_.empty()) { + if (disable_ || (request_queue_.empty() && remove_queue_.empty())) { running_ = false; return true; }