Fix bug on shutdown case

pull/2647/head
vjpai 10 years ago
parent b28456b1e4
commit b76f3ada11
  1. 1
      include/grpc++/dynamic_thread_pool.h
  2. 13
      src/cpp/server/dynamic_thread_pool.cc

@ -64,6 +64,7 @@ class DynamicThreadPool GRPC_FINAL : public ThreadPoolInterface {
};
grpc::mutex mu_;
grpc::condition_variable cv_;
grpc::condition_variable shutdown_cv_;
bool shutdown_;
std::queue<std::function<void()>> callbacks_;
int reserve_threads_;

@ -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_);
}

Loading…
Cancel
Save