summaryrefslogtreecommitdiff
path: root/gold/workqueue-threads.cc
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@google.com>2011-07-28 23:25:06 +0000
committerCary Coutant <ccoutant@google.com>2011-07-28 23:25:06 +0000
commita818347ef90d047756c0ba1255fc96ff4e6f7a50 (patch)
tree067b3e84fe0dfd902012bdcb7240e5d75ca09093 /gold/workqueue-threads.cc
parentf82cee26921220b9ddd20ecb2a56bb4df109642f (diff)
downloadbinutils-redhat-a818347ef90d047756c0ba1255fc96ff4e6f7a50.tar.gz
* workqueue-internal.h (Workqueue_threader::should_cancel_thread):
Add thread_number parameter. (Workqueue_threader_threadpool::should_cancel_thread): Likewise. * workqueue-threads.cc (Workqueue_threader_threadpool::should_cancel_thread): Cancel current thread if its thread number is greater than desired thread count. * workqueue.cc (Workqueue_threader_single::should_cancel_thread): Add thread_number parameter. (Workqueue::should_cancel_thread): Likewise. (Workqueue::find_runnable_or_wait): Pass thread_number to should_cancel_thread. * workqueue.h (Workqueue::should_cancel_thread): Add thread_number parameter.
Diffstat (limited to 'gold/workqueue-threads.cc')
-rw-r--r--gold/workqueue-threads.cc7
1 files changed, 4 insertions, 3 deletions
diff --git a/gold/workqueue-threads.cc b/gold/workqueue-threads.cc
index 60d4adcbb3..de2ce5bef5 100644
--- a/gold/workqueue-threads.cc
+++ b/gold/workqueue-threads.cc
@@ -174,7 +174,7 @@ Workqueue_threader_threadpool::set_thread_count(int thread_count)
// Return whether the current thread should be cancelled.
bool
-Workqueue_threader_threadpool::should_cancel_thread()
+Workqueue_threader_threadpool::should_cancel_thread(int thread_number)
{
// Fast exit without taking a lock.
if (!this->check_thread_count_)
@@ -182,12 +182,13 @@ Workqueue_threader_threadpool::should_cancel_thread()
{
Hold_lock hl(this->lock_);
- if (this->threads_ > this->desired_thread_count_)
+ if (thread_number > this->desired_thread_count_)
{
--this->threads_;
+ if (this->threads_ <= this->desired_thread_count_)
+ this->check_thread_count_ = 0;
return true;
}
- this->check_thread_count_ = 0;
}
return false;