| 
					
				 | 
			
			
				@@ -41,7 +41,10 @@ ThreadPool::ThreadPool(int num_threads) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       for (;;) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         std::unique_lock<std::mutex> lock(mu_); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // Wait until work is available or we are shutting down. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        cv_.wait(lock, [=]() { return shutdown_ || !callbacks_.empty(); }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        auto have_work = [=]() { return shutdown_ || !callbacks_.empty(); }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!have_work()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          cv_.wait(lock, have_work); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // Drain callbacks before considering shutdown to ensure all work 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // gets completed. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!callbacks_.empty()) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -71,7 +74,7 @@ ThreadPool::~ThreadPool() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void ThreadPool::ScheduleCallback(const std::function<void()> &callback) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   std::lock_guard<std::mutex> lock(mu_); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   callbacks_.push(callback); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  cv_.notify_all(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  cv_.notify_one(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }  // namespace grpc 
			 |