|  | @@ -42,27 +42,24 @@ typedef struct endpoint_ll_node {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static endpoint_ll_node *head = NULL;
 | 
	
		
			
				|  |  |  static gpr_mu g_endpoint_mutex;
 | 
	
		
			
				|  |  | -static bool g_init_done = false;
 | 
	
		
			
				|  |  | +static gpr_once g_once_init = GPR_ONCE_INIT;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -void grpc_initialize_network_status_monitor() {
 | 
	
		
			
				|  |  | -  g_init_done = true;
 | 
	
		
			
				|  |  | -  gpr_mu_init(&g_endpoint_mutex);
 | 
	
		
			
				|  |  | -  // TODO(makarandd): Install callback with OS to monitor network status.
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -void grpc_destroy_network_status_monitor() {
 | 
	
		
			
				|  |  | -  for (endpoint_ll_node *curr = head; curr != NULL;) {
 | 
	
		
			
				|  |  | -    endpoint_ll_node *next = curr->next;
 | 
	
		
			
				|  |  | -    gpr_free(curr);
 | 
	
		
			
				|  |  | -    curr = next;
 | 
	
		
			
				|  |  | +static void destroy_network_status_monitor(void) {
 | 
	
		
			
				|  |  | +  if (head != NULL) {
 | 
	
		
			
				|  |  | +    gpr_log(GPR_ERROR,
 | 
	
		
			
				|  |  | +            "Memory leaked as all network endpoints were not shut down");
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    gpr_mu_destroy(&g_endpoint_mutex);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +static void initialize_network_status_monitor(void) {
 | 
	
		
			
				|  |  | +  gpr_mu_init(&g_endpoint_mutex);
 | 
	
		
			
				|  |  | +  atexit(destroy_network_status_monitor);
 | 
	
		
			
				|  |  | +  // TODO(makarandd): Install callback with OS to monitor network status.
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  void grpc_network_status_register_endpoint(grpc_endpoint *ep) {
 | 
	
		
			
				|  |  | -  if (!g_init_done) {
 | 
	
		
			
				|  |  | -    grpc_initialize_network_status_monitor();
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | +  gpr_once_init(&g_once_init, initialize_network_status_monitor);
 | 
	
		
			
				|  |  |    gpr_mu_lock(&g_endpoint_mutex);
 | 
	
		
			
				|  |  |    if (head == NULL) {
 | 
	
		
			
				|  |  |      head = (endpoint_ll_node *)gpr_malloc(sizeof(endpoint_ll_node));
 |