|  | @@ -72,6 +72,11 @@ static int grpc_polling_trace = 0; /* Disabled by default */
 | 
	
		
			
				|  |  |  static int grpc_wakeup_signal = -1;
 | 
	
		
			
				|  |  |  static bool is_grpc_wakeup_signal_initialized = false;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/* TODO: sreek: Right now, this wakes up all pollers. In future we should make
 | 
	
		
			
				|  |  | + * sure to wake up one polling thread (which can wake up other threads if
 | 
	
		
			
				|  |  | + * needed) */
 | 
	
		
			
				|  |  | +static grpc_wakeup_fd global_wakeup_fd;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  /* Implements the function defined in grpc_posix.h. This function might be
 | 
	
		
			
				|  |  |   * called before even calling grpc_init() to set either a different signal to
 | 
	
		
			
				|  |  |   * use. If signum == -1, then the use of signals is disabled */
 | 
	
	
		
			
				|  | @@ -438,7 +443,7 @@ static void polling_island_add_wakeup_fd_locked(polling_island *pi,
 | 
	
		
			
				|  |  |                   "epoll_ctl (epoll_fd: %d) add wakeup fd: %d failed with "
 | 
	
		
			
				|  |  |                   "error: %d (%s)",
 | 
	
		
			
				|  |  |                   pi->epoll_fd,
 | 
	
		
			
				|  |  | -                 GRPC_WAKEUP_FD_GET_READ_FD(&grpc_global_wakeup_fd), errno,
 | 
	
		
			
				|  |  | +                 GRPC_WAKEUP_FD_GET_READ_FD(&global_wakeup_fd), errno,
 | 
	
		
			
				|  |  |                   strerror(errno));
 | 
	
		
			
				|  |  |      append_error(error, GRPC_OS_ERROR(errno, err_msg), err_desc);
 | 
	
		
			
				|  |  |      gpr_free(err_msg);
 | 
	
	
		
			
				|  | @@ -541,7 +546,7 @@ static polling_island *polling_island_create(grpc_exec_ctx *exec_ctx,
 | 
	
		
			
				|  |  |      goto done;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  polling_island_add_wakeup_fd_locked(pi, &grpc_global_wakeup_fd, error);
 | 
	
		
			
				|  |  | +  polling_island_add_wakeup_fd_locked(pi, &global_wakeup_fd, error);
 | 
	
		
			
				|  |  |    polling_island_add_wakeup_fd_locked(pi, &pi->workqueue_wakeup_fd, error);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    if (initial_fd != NULL) {
 | 
	
	
		
			
				|  | @@ -843,11 +848,6 @@ static void polling_island_global_shutdown() {
 | 
	
		
			
				|  |  |   * alarm 'epoch'). This wakeup_fd gives us something to alert on when such a
 | 
	
		
			
				|  |  |   * case occurs. */
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -/* TODO: sreek: Right now, this wakes up all pollers. In future we should make
 | 
	
		
			
				|  |  | - * sure to wake up one polling thread (which can wake up other threads if
 | 
	
		
			
				|  |  | - * needed) */
 | 
	
		
			
				|  |  | -grpc_wakeup_fd grpc_global_wakeup_fd;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  static grpc_fd *fd_freelist = NULL;
 | 
	
		
			
				|  |  |  static gpr_mu fd_freelist_mu;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1163,11 +1163,11 @@ static grpc_error *pollset_global_init(void) {
 | 
	
		
			
				|  |  |    gpr_tls_init(&g_current_thread_pollset);
 | 
	
		
			
				|  |  |    gpr_tls_init(&g_current_thread_worker);
 | 
	
		
			
				|  |  |    poller_kick_init();
 | 
	
		
			
				|  |  | -  return grpc_wakeup_fd_init(&grpc_global_wakeup_fd);
 | 
	
		
			
				|  |  | +  return grpc_wakeup_fd_init(&global_wakeup_fd);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static void pollset_global_shutdown(void) {
 | 
	
		
			
				|  |  | -  grpc_wakeup_fd_destroy(&grpc_global_wakeup_fd);
 | 
	
		
			
				|  |  | +  grpc_wakeup_fd_destroy(&global_wakeup_fd);
 | 
	
		
			
				|  |  |    gpr_tls_destroy(&g_current_thread_pollset);
 | 
	
		
			
				|  |  |    gpr_tls_destroy(&g_current_thread_worker);
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -1274,7 +1274,7 @@ static grpc_error *pollset_kick(grpc_pollset *p,
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static grpc_error *kick_poller(void) {
 | 
	
		
			
				|  |  | -  return grpc_wakeup_fd_wakeup(&grpc_global_wakeup_fd);
 | 
	
		
			
				|  |  | +  return grpc_wakeup_fd_wakeup(&global_wakeup_fd);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static void pollset_init(grpc_pollset *pollset, gpr_mu **mu) {
 | 
	
	
		
			
				|  | @@ -1501,13 +1501,13 @@ static void pollset_work_and_unlock(grpc_exec_ctx *exec_ctx,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      for (int i = 0; i < ep_rv; ++i) {
 | 
	
		
			
				|  |  |        void *data_ptr = ep_ev[i].data.ptr;
 | 
	
		
			
				|  |  | -      if (data_ptr == &grpc_global_wakeup_fd) {
 | 
	
		
			
				|  |  | +      if (data_ptr == &global_wakeup_fd) {
 | 
	
		
			
				|  |  |          append_error(error,
 | 
	
		
			
				|  |  | -                     grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd),
 | 
	
		
			
				|  |  | +                     grpc_wakeup_fd_consume_wakeup(&global_wakeup_fd),
 | 
	
		
			
				|  |  |                       err_desc);
 | 
	
		
			
				|  |  |        } else if (data_ptr == &pi->workqueue_wakeup_fd) {
 | 
	
		
			
				|  |  |          append_error(error,
 | 
	
		
			
				|  |  | -                     grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd),
 | 
	
		
			
				|  |  | +                     grpc_wakeup_fd_consume_wakeup(&global_wakeup_fd),
 | 
	
		
			
				|  |  |                       err_desc);
 | 
	
		
			
				|  |  |          maybe_do_workqueue_work(exec_ctx, pi);
 | 
	
		
			
				|  |  |        } else if (data_ptr == &polling_island_wakeup_fd) {
 |