Make network status follow the normal init/shutdown path

pull/6737/head
Craig Tiller 9 years ago
parent 9053ec01fe
commit f11b3336ec
  1. 3
      src/core/lib/iomgr/iomgr.c
  2. 7
      src/core/lib/iomgr/network_status_tracker.c
  3. 4
      src/core/lib/iomgr/network_status_tracker.h

@ -45,6 +45,7 @@
#include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/iomgr_internal.h" #include "src/core/lib/iomgr/iomgr_internal.h"
#include "src/core/lib/iomgr/network_status_tracker.h"
#include "src/core/lib/iomgr/timer.h" #include "src/core/lib/iomgr/timer.h"
#include "src/core/lib/support/env.h" #include "src/core/lib/support/env.h"
#include "src/core/lib/support/string.h" #include "src/core/lib/support/string.h"
@ -62,6 +63,7 @@ void grpc_iomgr_init(void) {
grpc_timer_list_init(gpr_now(GPR_CLOCK_MONOTONIC)); grpc_timer_list_init(gpr_now(GPR_CLOCK_MONOTONIC));
g_root_object.next = g_root_object.prev = &g_root_object; g_root_object.next = g_root_object.prev = &g_root_object;
g_root_object.name = "root"; g_root_object.name = "root";
grpc_network_status_init();
grpc_iomgr_platform_init(); grpc_iomgr_platform_init();
} }
@ -140,6 +142,7 @@ void grpc_iomgr_shutdown(void) {
grpc_iomgr_platform_shutdown(); grpc_iomgr_platform_shutdown();
grpc_exec_ctx_global_shutdown(); grpc_exec_ctx_global_shutdown();
grpc_network_status_shutdown();
gpr_mu_destroy(&g_mu); gpr_mu_destroy(&g_mu);
gpr_cv_destroy(&g_rcv); gpr_cv_destroy(&g_rcv);
} }

@ -42,9 +42,8 @@ typedef struct endpoint_ll_node {
static endpoint_ll_node *head = NULL; static endpoint_ll_node *head = NULL;
static gpr_mu g_endpoint_mutex; static gpr_mu g_endpoint_mutex;
static gpr_once g_once_init = GPR_ONCE_INIT;
static void destroy_network_status_monitor(void) { void grpc_network_status_shutdown(void) {
if (head != NULL) { if (head != NULL) {
gpr_log(GPR_ERROR, gpr_log(GPR_ERROR,
"Memory leaked as all network endpoints were not shut down"); "Memory leaked as all network endpoints were not shut down");
@ -52,14 +51,12 @@ static void destroy_network_status_monitor(void) {
gpr_mu_destroy(&g_endpoint_mutex); gpr_mu_destroy(&g_endpoint_mutex);
} }
static void initialize_network_status_monitor(void) { void grpc_network_status_init(void) {
gpr_mu_init(&g_endpoint_mutex); gpr_mu_init(&g_endpoint_mutex);
atexit(destroy_network_status_monitor);
// TODO(makarandd): Install callback with OS to monitor network status. // TODO(makarandd): Install callback with OS to monitor network status.
} }
void grpc_network_status_register_endpoint(grpc_endpoint *ep) { void grpc_network_status_register_endpoint(grpc_endpoint *ep) {
gpr_once_init(&g_once_init, initialize_network_status_monitor);
gpr_mu_lock(&g_endpoint_mutex); gpr_mu_lock(&g_endpoint_mutex);
if (head == NULL) { if (head == NULL) {
head = (endpoint_ll_node *)gpr_malloc(sizeof(endpoint_ll_node)); head = (endpoint_ll_node *)gpr_malloc(sizeof(endpoint_ll_node));

@ -35,7 +35,11 @@
#define GRPC_CORE_LIB_IOMGR_NETWORK_STATUS_TRACKER_H #define GRPC_CORE_LIB_IOMGR_NETWORK_STATUS_TRACKER_H
#include "src/core/lib/iomgr/endpoint.h" #include "src/core/lib/iomgr/endpoint.h"
void grpc_network_status_init(void);
void grpc_network_status_shutdown(void);
void grpc_network_status_register_endpoint(grpc_endpoint *ep); void grpc_network_status_register_endpoint(grpc_endpoint *ep);
void grpc_network_status_unregister_endpoint(grpc_endpoint *ep); void grpc_network_status_unregister_endpoint(grpc_endpoint *ep);
void grpc_network_status_shutdown_all_endpoints(); void grpc_network_status_shutdown_all_endpoints();
#endif /* GRPC_CORE_LIB_IOMGR_NETWORK_STATUS_TRACKER_H */ #endif /* GRPC_CORE_LIB_IOMGR_NETWORK_STATUS_TRACKER_H */

Loading…
Cancel
Save