mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-04-06 14:21:43 +08:00
* 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.
This commit is contained in:
parent
a27e437177
commit
dcd8d12e1c
@ -1,3 +1,20 @@
|
||||
2011-07-28 Cary Coutant <ccoutant@google.com>
|
||||
|
||||
* 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.
|
||||
|
||||
2011-07-22 Sriraman Tallam <tmsriram@google.com>
|
||||
|
||||
* symtab.cc (Symbol_table::add_from_relobj): Mark symbol as referenced
|
||||
|
@ -56,7 +56,7 @@ class Workqueue_threader
|
||||
|
||||
// Return whether to cancel the current thread.
|
||||
virtual bool
|
||||
should_cancel_thread() = 0;
|
||||
should_cancel_thread(int thread_number) = 0;
|
||||
|
||||
protected:
|
||||
// Get the Workqueue.
|
||||
@ -84,7 +84,7 @@ class Workqueue_threader_threadpool : public Workqueue_threader
|
||||
|
||||
// Return whether to cancel a thread.
|
||||
bool
|
||||
should_cancel_thread();
|
||||
should_cancel_thread(int thread_number);
|
||||
|
||||
// Process all tasks. This keeps running until told to cancel.
|
||||
void
|
||||
|
@ -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;
|
||||
|
@ -110,7 +110,7 @@ class Workqueue_threader_single : public Workqueue_threader
|
||||
{ gold_assert(thread_count > 0); }
|
||||
|
||||
bool
|
||||
should_cancel_thread()
|
||||
should_cancel_thread(int)
|
||||
{ return false; }
|
||||
};
|
||||
|
||||
@ -202,9 +202,9 @@ Workqueue::queue_next(Task* t)
|
||||
// Return whether to cancel the current thread.
|
||||
|
||||
inline bool
|
||||
Workqueue::should_cancel_thread()
|
||||
Workqueue::should_cancel_thread(int thread_number)
|
||||
{
|
||||
return this->threader_->should_cancel_thread();
|
||||
return this->threader_->should_cancel_thread(thread_number);
|
||||
}
|
||||
|
||||
// Find a runnable task in TASKS. Return NULL if none could be found.
|
||||
@ -264,7 +264,7 @@ Workqueue::find_runnable_or_wait(int thread_number)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (this->should_cancel_thread())
|
||||
if (this->should_cancel_thread(thread_number))
|
||||
return NULL;
|
||||
|
||||
gold_debug(DEBUG_TASK, "%3d sleeping", thread_number);
|
||||
|
@ -268,7 +268,7 @@ class Workqueue
|
||||
|
||||
// Return whether to cancel this thread.
|
||||
bool
|
||||
should_cancel_thread();
|
||||
should_cancel_thread(int thread_number);
|
||||
|
||||
// Master Workqueue lock. This controls access to the following
|
||||
// member variables.
|
||||
|
Loading…
x
Reference in New Issue
Block a user