|  | @@ -273,11 +273,29 @@ end:
 | 
	
		
			
				|  |  |    return error;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +static void update_tenancy() {
 | 
	
		
			
				|  |  | +  gpr_once_init(&g_once, init_default_credentials);
 | 
	
		
			
				|  |  | +  gpr_mu_lock(&g_state_mu);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /* Try a platform-provided hint for GCE. */
 | 
	
		
			
				|  |  | +  if (!g_metadata_server_available) {
 | 
	
		
			
				|  |  | +    g_is_on_gce = g_gce_tenancy_checker();
 | 
	
		
			
				|  |  | +    g_metadata_server_available = g_is_on_gce;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  /* TODO: Add a platform-provided hint for GAE. */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /* Do a network test for metadata server. */
 | 
	
		
			
				|  |  | +  if (!g_metadata_server_available) {
 | 
	
		
			
				|  |  | +    g_metadata_server_available = is_metadata_server_reachable();
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  gpr_mu_unlock(&g_state_mu);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  static void default_call_creds(grpc_core::RefCountedPtr<grpc_call_credentials>* call_creds,
 | 
	
		
			
				|  |  |                                 grpc_error* error)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    grpc_error* err;
 | 
	
		
			
				|  |  | -  gpr_once_init(&g_once, init_default_credentials);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    /* First, try the environment variable. */
 | 
	
		
			
				|  |  |    err = create_default_creds_from_path(
 | 
	
	
		
			
				|  | @@ -291,21 +309,6 @@ static void default_call_creds(grpc_core::RefCountedPtr<grpc_call_credentials>*
 | 
	
		
			
				|  |  |    if (err == GRPC_ERROR_NONE) return;
 | 
	
		
			
				|  |  |    error = grpc_error_add_child(error, err);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  gpr_mu_lock(&g_state_mu);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  /* Try a platform-provided hint for GCE. */
 | 
	
		
			
				|  |  | -  if (!g_metadata_server_available) {
 | 
	
		
			
				|  |  | -    g_is_on_gce = g_gce_tenancy_checker();
 | 
	
		
			
				|  |  | -    g_metadata_server_available = g_is_on_gce;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  /* TODO: Add a platform-provided hint for GAE. */
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  /* Do a network test for metadata server. */
 | 
	
		
			
				|  |  | -  if (!g_metadata_server_available) {
 | 
	
		
			
				|  |  | -    g_metadata_server_available = is_metadata_server_reachable();
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  gpr_mu_unlock(&g_state_mu);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |    if (g_metadata_server_available) {
 | 
	
		
			
				|  |  |      *call_creds = grpc_core::RefCountedPtr<grpc_call_credentials>(
 | 
	
		
			
				|  |  |          grpc_google_compute_engine_credentials_create(nullptr));
 | 
	
	
		
			
				|  | @@ -326,6 +329,8 @@ grpc_channel_credentials* grpc_google_default_credentials_create(grpc_call_crede
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    GRPC_API_TRACE("grpc_google_default_credentials_create(%p)", 1, (call_credentials));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  update_tenancy();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    if (call_credentials == nullptr) {
 | 
	
		
			
				|  |  |      default_call_creds(&call_creds, error);
 | 
	
		
			
				|  |  |    }
 |