|
|
|
@ -58,6 +58,9 @@ void DynamicThreadPool::DynamicThread::ThreadFunc() { |
|
|
|
|
pool_->dead_threads_.push_back(this); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if ((pool_->shutdown_) && (pool_->nthreads_ == 0)) { |
|
|
|
|
pool_->shutdown_cv_.notify_one(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void DynamicThreadPool::ThreadFunc() { |
|
|
|
@ -103,12 +106,12 @@ void DynamicThreadPool::ReapThreads(std::list<DynamicThread*>* tlist) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
DynamicThreadPool::~DynamicThreadPool() { |
|
|
|
|
{ |
|
|
|
|
grpc::lock_guard<grpc::mutex> lock(mu_); |
|
|
|
|
shutdown_ = true; |
|
|
|
|
cv_.notify_all(); |
|
|
|
|
grpc::unique_lock<grpc::mutex> lock(mu_); |
|
|
|
|
shutdown_ = true; |
|
|
|
|
cv_.notify_all(); |
|
|
|
|
while (nthreads_ != 0) { |
|
|
|
|
shutdown_cv_.wait(lock); |
|
|
|
|
} |
|
|
|
|
ReapThreads(&live_threads_); |
|
|
|
|
ReapThreads(&dead_threads_); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|