| 
					
				 | 
			
			
				@@ -31,95 +31,18 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include <grpc/support/alloc.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include <grpc/support/log.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/lib/iomgr/endpoint.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-typedef struct endpoint_ll_node { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_endpoint *ep; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  struct endpoint_ll_node *next; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} endpoint_ll_node; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static endpoint_ll_node *head = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static gpr_mu g_endpoint_mutex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void grpc_network_status_shutdown(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (head != NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    gpr_log(GPR_ERROR, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            "Memory leaked as not all network endpoints were shut down"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  gpr_mu_destroy(&g_endpoint_mutex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void grpc_network_status_shutdown(void) {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void grpc_network_status_init(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  gpr_mu_destroy(&g_endpoint_mutex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void grpc_network_status_register_endpoint(grpc_endpoint *ep) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  gpr_mu_lock(&g_endpoint_mutex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (head == NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    head = (endpoint_ll_node *)gpr_malloc(sizeof(endpoint_ll_node)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    head->ep = ep; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    head->next = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    endpoint_ll_node *prev_head = head; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    head = (endpoint_ll_node *)gpr_malloc(sizeof(endpoint_ll_node)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    head->ep = ep; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    head->next = prev_head; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  gpr_mu_unlock(&g_endpoint_mutex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void grpc_destroy_network_status_monitor() {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void grpc_network_status_unregister_endpoint(grpc_endpoint *ep) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  gpr_mu_lock(&g_endpoint_mutex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(head); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  bool found = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  endpoint_ll_node *prev = head; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // if we're unregistering the head, just move head to the next 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (ep == head->ep) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    head = head->next; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    gpr_free(prev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    found = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    for (endpoint_ll_node *curr = head->next; curr != NULL; curr = curr->next) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (ep == curr->ep) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        prev->next = curr->next; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        gpr_free(curr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        found = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      prev = curr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  gpr_mu_unlock(&g_endpoint_mutex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GPR_ASSERT(found); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void grpc_network_status_register_endpoint(grpc_endpoint *ep) { (void)ep; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// Walk the linked-list from head and execute shutdown. It is possible that 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// other threads might be in the process of shutdown as well, but that has 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// no side effect since endpoint shutdown is idempotent. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void grpc_network_status_shutdown_all_endpoints() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  gpr_mu_lock(&g_endpoint_mutex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (head == NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    gpr_mu_unlock(&g_endpoint_mutex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void grpc_network_status_unregister_endpoint(grpc_endpoint *ep) { (void)ep; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  for (endpoint_ll_node *curr = head; curr != NULL; curr = curr->next) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    curr->ep->vtable->shutdown(&exec_ctx, curr->ep, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                               GRPC_ERROR_CREATE("Network unavailable")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  gpr_mu_unlock(&g_endpoint_mutex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_exec_ctx_finish(&exec_ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void grpc_network_status_shutdown_all_endpoints() {} 
			 |