|  | @@ -21,6 +21,8 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #include <grpc/support/port_platform.h>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +#include <limits>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  #include <grpc/impl/codegen/grpc_types.h>
 | 
	
		
			
				|  |  |  #include <grpc/support/atm.h>
 | 
	
		
			
				|  |  |  #include <grpc/support/cpu.h>
 | 
	
	
		
			
				|  | @@ -132,7 +134,12 @@ class ExecCtx {
 | 
	
		
			
				|  |  |    ExecCtx(const ExecCtx&) = delete;
 | 
	
		
			
				|  |  |    ExecCtx& operator=(const ExecCtx&) = delete;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  unsigned starting_cpu() const { return starting_cpu_; }
 | 
	
		
			
				|  |  | +  unsigned starting_cpu() {
 | 
	
		
			
				|  |  | +    if (starting_cpu_ == std::numeric_limits<unsigned>::max()) {
 | 
	
		
			
				|  |  | +      starting_cpu_ = gpr_cpu_current_cpu();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    return starting_cpu_;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    struct CombinerData {
 | 
	
		
			
				|  |  |      /* currently active combiner: updated only via combiner.c */
 | 
	
	
		
			
				|  | @@ -239,7 +246,7 @@ class ExecCtx {
 | 
	
		
			
				|  |  |    CombinerData combiner_data_ = {nullptr, nullptr};
 | 
	
		
			
				|  |  |    uintptr_t flags_;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  unsigned starting_cpu_ = gpr_cpu_current_cpu();
 | 
	
		
			
				|  |  | +  unsigned starting_cpu_ = std::numeric_limits<unsigned>::max();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    bool now_is_valid_ = false;
 | 
	
		
			
				|  |  |    grpc_millis now_ = 0;
 |