|  | @@ -128,27 +128,13 @@ static bool is_eof(input_stream *inp) { return inp->cur == inp->end; }
 | 
	
		
			
				|  |  |  ////////////////////////////////////////////////////////////////////////////////
 | 
	
		
			
				|  |  |  // global state
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -static gpr_mu g_mu;
 | 
	
		
			
				|  |  | -static gpr_cv g_cv;
 | 
	
		
			
				|  |  |  static gpr_timespec g_now;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  extern gpr_timespec (*gpr_now_impl)(gpr_clock_type clock_type);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static gpr_timespec now_impl(gpr_clock_type clock_type) {
 | 
	
		
			
				|  |  |    GPR_ASSERT(clock_type != GPR_TIMESPAN);
 | 
	
		
			
				|  |  | -  gpr_mu_lock(&g_mu);
 | 
	
		
			
				|  |  | -  gpr_timespec now = g_now;
 | 
	
		
			
				|  |  | -  gpr_cv_broadcast(&g_cv);
 | 
	
		
			
				|  |  | -  gpr_mu_unlock(&g_mu);
 | 
	
		
			
				|  |  | -  return now;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -static void wait_until(gpr_timespec when) {
 | 
	
		
			
				|  |  | -  gpr_mu_lock(&g_mu);
 | 
	
		
			
				|  |  | -  while (gpr_time_cmp(when, g_now) < 0) {
 | 
	
		
			
				|  |  | -    gpr_cv_wait(&g_cv, &g_mu, gpr_inf_future(GPR_CLOCK_REALTIME));
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  gpr_mu_unlock(&g_mu);
 | 
	
		
			
				|  |  | +  return g_now;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  ////////////////////////////////////////////////////////////////////////////////
 | 
	
	
		
			
				|  | @@ -226,8 +212,6 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
 | 
	
		
			
				|  |  |    input_stream inp = {data, data + size};
 | 
	
		
			
				|  |  |    grpc_resolve_address = my_resolve_address;
 | 
	
		
			
				|  |  |    grpc_tcp_client_connect_impl = my_tcp_client_connect;
 | 
	
		
			
				|  |  | -  gpr_mu_init(&g_mu);
 | 
	
		
			
				|  |  | -  gpr_cv_init(&g_cv);
 | 
	
		
			
				|  |  |    gpr_now_impl = now_impl;
 | 
	
		
			
				|  |  |    grpc_init();
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -255,10 +239,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      gpr_mu_lock(&g_mu);
 | 
	
		
			
				|  |  |        g_now = gpr_time_add(g_now, gpr_time_from_seconds(1, GPR_TIMESPAN));
 | 
	
		
			
				|  |  | -      gpr_cv_broadcast(&g_cv);
 | 
	
		
			
				|  |  | -      gpr_mu_unlock(&g_mu);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      switch (next_byte(&inp)) {
 | 
	
	
		
			
				|  | @@ -287,10 +268,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        // increment global time
 | 
	
		
			
				|  |  |        case 1: {
 | 
	
		
			
				|  |  | -        gpr_mu_lock(&g_mu);
 | 
	
		
			
				|  |  |          g_now = gpr_time_add(
 | 
	
		
			
				|  |  |              g_now, gpr_time_from_micros(read_uint32(&inp), GPR_TIMESPAN));
 | 
	
		
			
				|  |  | -        gpr_mu_unlock(&g_mu);
 | 
	
		
			
				|  |  |          break;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        // create an insecure channel
 | 
	
	
		
			
				|  | @@ -371,7 +350,5 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
 | 
	
		
			
				|  |  |    grpc_completion_queue_destroy(cq);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    grpc_shutdown();
 | 
	
		
			
				|  |  | -  gpr_mu_destroy(&g_mu);
 | 
	
		
			
				|  |  | -  gpr_cv_destroy(&g_cv);
 | 
	
		
			
				|  |  |    return 0;
 | 
	
		
			
				|  |  |  }
 |