|
|
|
@ -61,6 +61,15 @@ static uint64_t g_timed_waiter_generation; |
|
|
|
|
|
|
|
|
|
static void timer_thread(void* completed_thread_ptr); |
|
|
|
|
|
|
|
|
|
// For debug only. Forward statistics to another module.
|
|
|
|
|
extern void (*g_grpc_debug_timer_manager_stats)(int64_t timer_manager_init_count, int64_t timer_manager_shutdown_count, int64_t fork_count, int64_t timer_wait_err, int64_t timer_wait_cv); |
|
|
|
|
// For debug only. Variables storing the counters being logged.
|
|
|
|
|
extern int64_t g_timer_manager_init_count; |
|
|
|
|
extern int64_t g_timer_manager_shutdown_count; |
|
|
|
|
extern int64_t g_fork_count; |
|
|
|
|
extern int64_t g_timer_wait_err; |
|
|
|
|
extern int64_t g_timer_wait_cv; |
|
|
|
|
|
|
|
|
|
static void gc_completed_threads(void) { |
|
|
|
|
if (g_completed_threads != nullptr) { |
|
|
|
|
completed_thread* to_gc = g_completed_threads; |
|
|
|
@ -285,6 +294,7 @@ void grpc_timer_manager_init(void) { |
|
|
|
|
gpr_mu_init(&g_mu); |
|
|
|
|
gpr_cv_init(&g_cv_wait); |
|
|
|
|
gpr_cv_init(&g_cv_shutdown); |
|
|
|
|
g_timer_manager_init_count++; |
|
|
|
|
g_threaded = false; |
|
|
|
|
g_thread_count = 0; |
|
|
|
|
g_waiter_count = 0; |
|
|
|
@ -319,6 +329,7 @@ static void stop_threads(void) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void grpc_timer_manager_shutdown(void) { |
|
|
|
|
g_timer_manager_shutdown_count++; |
|
|
|
|
stop_threads(); |
|
|
|
|
|
|
|
|
|
gpr_mu_destroy(&g_mu); |
|
|
|
@ -327,6 +338,7 @@ void grpc_timer_manager_shutdown(void) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void grpc_timer_manager_set_threading(bool threaded) { |
|
|
|
|
g_fork_count++; |
|
|
|
|
if (threaded) { |
|
|
|
|
start_threads(); |
|
|
|
|
} else { |
|
|
|
|