mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-10-31 08:22:16 +01:00 
			
		
		
		
	Simplify checks for CLOCK_MONOTONIC
Remove the complicated configure-time and runtime checks, and just use CLOCK_MONOTONIC if it's defined. https://bugzilla.gnome.org/show_bug.cgi?id=661421
This commit is contained in:
		
				
					committed by
					
						 Matthias Clasen
						Matthias Clasen
					
				
			
			
				
	
			
			
			
						parent
						
							00817371a6
						
					
				
				
					commit
					7f66b04bfd
				
			
							
								
								
									
										15
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								configure.ac
									
									
									
									
									
								
							| @@ -2512,21 +2512,6 @@ AC_CHECK_FUNCS(clock_gettime, [], [ | |||||||
| ]) | ]) | ||||||
| AC_SUBST(GLIB_RT_LIBS) | AC_SUBST(GLIB_RT_LIBS) | ||||||
|  |  | ||||||
| AC_CACHE_CHECK(for monotonic clocks, |  | ||||||
|     glib_cv_monotonic_clock,AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ |  | ||||||
| #include <time.h> |  | ||||||
| #include <unistd.h> |  | ||||||
| int main() { |  | ||||||
| #if !(defined(_POSIX_MONOTONIC_CLOCK) && _POSIX_MONOTONIC_CLOCK >= 0 && defined(CLOCK_MONOTONIC)) |  | ||||||
|         #error No monotonic clock |  | ||||||
| #endif |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| ]])],glib_cv_monotonic_clock=yes,glib_cv_monotonic_clock=no)) |  | ||||||
| if test "$glib_cv_monotonic_clock" = "yes"; then |  | ||||||
|   AC_DEFINE(HAVE_MONOTONIC_CLOCK,1,[Have a monotonic clock]) |  | ||||||
| fi |  | ||||||
|  |  | ||||||
|  |  | ||||||
| dnl ************************ | dnl ************************ | ||||||
| dnl *** g_atomic_* tests *** | dnl *** g_atomic_* tests *** | ||||||
|   | |||||||
							
								
								
									
										30
									
								
								glib/gmain.c
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								glib/gmain.c
									
									
									
									
									
								
							| @@ -2041,29 +2041,14 @@ g_get_monotonic_time (void) | |||||||
| { | { | ||||||
| #ifdef HAVE_CLOCK_GETTIME | #ifdef HAVE_CLOCK_GETTIME | ||||||
|   /* librt clock_gettime() is our first choice */ |   /* librt clock_gettime() is our first choice */ | ||||||
|   { |  | ||||||
| #ifdef HAVE_MONOTONIC_CLOCK |  | ||||||
|     static volatile gsize clockid = 0; |  | ||||||
| #else |  | ||||||
|     static clockid_t clockid = CLOCK_REALTIME; |  | ||||||
| #endif |  | ||||||
|   struct timespec ts; |   struct timespec ts; | ||||||
|  |  | ||||||
| #ifdef HAVE_MONOTONIC_CLOCK | #ifdef CLOCK_MONOTONIC | ||||||
|     if (g_once_init_enter (&clockid)) |   clock_gettime (CLOCK_MONOTONIC, &ts); | ||||||
|       { | #else | ||||||
| 	clockid_t best_clockid; |   clock_gettime (CLOCK_REALTIME, &ts); | ||||||
|  |  | ||||||
| 	if (sysconf (_SC_MONOTONIC_CLOCK) >= 0) |  | ||||||
| 	  best_clockid = CLOCK_MONOTONIC; |  | ||||||
| 	else |  | ||||||
| 	  best_clockid = CLOCK_REALTIME; |  | ||||||
| 	g_once_init_leave (&clockid, (gsize)best_clockid); |  | ||||||
|       } |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|     clock_gettime (clockid, &ts); |  | ||||||
|  |  | ||||||
|   /* In theory monotonic time can have any epoch. |   /* In theory monotonic time can have any epoch. | ||||||
|    * |    * | ||||||
|    * glib presently assumes the following: |    * glib presently assumes the following: | ||||||
| @@ -2087,20 +2072,19 @@ g_get_monotonic_time (void) | |||||||
|             ts.tv_sec < G_GINT64_CONSTANT (315569520000000000)); |             ts.tv_sec < G_GINT64_CONSTANT (315569520000000000)); | ||||||
|  |  | ||||||
|   return (((gint64) ts.tv_sec) * 1000000) + (ts.tv_nsec / 1000); |   return (((gint64) ts.tv_sec) * 1000000) + (ts.tv_nsec / 1000); | ||||||
|   } |  | ||||||
| #else | #else /* !HAVE_CLOCK_GETTIME */ | ||||||
|  |  | ||||||
|   /* It may look like we are discarding accuracy on Windows (since its |   /* It may look like we are discarding accuracy on Windows (since its | ||||||
|    * current time is expressed in 100s of nanoseconds) but according to |    * current time is expressed in 100s of nanoseconds) but according to | ||||||
|    * many sources, the time is only updated 64 times per second, so |    * many sources, the time is only updated 64 times per second, so | ||||||
|    * microsecond accuracy is more than enough. |    * microsecond accuracy is more than enough. | ||||||
|    */ |    */ | ||||||
|   { |  | ||||||
|   GTimeVal tv; |   GTimeVal tv; | ||||||
|  |  | ||||||
|   g_get_current_time (&tv); |   g_get_current_time (&tv); | ||||||
|  |  | ||||||
|   return (((gint64) tv.tv_sec) * 1000000) + tv.tv_usec; |   return (((gint64) tv.tv_sec) * 1000000) + tv.tv_usec; | ||||||
|   } |  | ||||||
| #endif | #endif | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user