| 
					
				 | 
			
			
				@@ -34,7 +34,8 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /* Posix code for gpr time support. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /* So we get nanosleep and clock_* */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#ifndef _POSIX_C_SOURCE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 199309L 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#undef _POSIX_C_SOURCE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define _POSIX_C_SOURCE 199309L 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -47,11 +48,25 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <unistd.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <grpc/support/time.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct timespec timespec_from_gpr(gpr_timespec gts) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  struct timespec rv; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  rv.tv_sec = gts.tv_sec; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  rv.tv_nsec = gts.tv_nsec; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return rv; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #if _POSIX_TIMERS > 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static gpr_timespec gpr_from_timespec(struct timespec ts) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  gpr_timespec rv; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  rv.tv_sec = ts.tv_sec; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  rv.tv_nsec = ts.tv_nsec; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return rv; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 gpr_timespec gpr_now(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  gpr_timespec now; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  struct timespec now; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   clock_gettime(CLOCK_REALTIME, &now); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return now; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return gpr_from_timespec(now); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /* For some reason Apple's OSes haven't implemented clock_gettime. */ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -69,6 +84,7 @@ gpr_timespec gpr_now(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void gpr_sleep_until(gpr_timespec until) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_timespec now; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_timespec delta; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  struct timespec delta_ts; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for (;;) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /* We could simplify by using clock_nanosleep instead, but it might be 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -79,7 +95,8 @@ void gpr_sleep_until(gpr_timespec until) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     delta = gpr_time_sub(until, now); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (nanosleep(&delta, NULL) == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    delta_ts = timespec_from_gpr(delta); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (nanosleep(&delta_ts, NULL) == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 |