From 4bbde50716bb9340d0f32459bac9d658b95c58a4 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 16 Jan 2007 21:25:03 +0000 Subject: [PATCH] Revert an accidental ABI break by moving gettime out of the 2007-01-16 Matthias Clasen * glib/gthread.h: * glib/gthread.c: * glib/glib.symbols: Revert an accidental ABI break by moving gettime out of the GThreadFunctions struct and making it a separate variable. (#397139, Joe Marcus Clarke) * gthread/*.c: Adapt. svn path=/trunk/; revision=5279 --- ChangeLog | 10 ++++++++++ glib/glib.symbols | 1 + glib/gthread.c | 7 ++++--- glib/gthread.h | 3 ++- glib/gtimer.c | 2 +- gthread/gthread-impl.c | 5 +++-- gthread/gthread-none.c | 2 ++ gthread/gthread-posix.c | 16 ++++++---------- gthread/gthread-win32.c | 5 ++--- 9 files changed, 31 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index aa1993e9..baab6605 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2007-01-16 Matthias Clasen + + * glib/gthread.h: + * glib/gthread.c: + * glib/glib.symbols: Revert an accidental ABI break by + moving gettime out of the GThreadFunctions struct and making + it a separate variable. (#397139, Joe Marcus Clarke) + + * gthread/*.c: Adapt. + 2007-01-16 Tor Lillqvist * glib/gthread.c (gettime): GetSystemTimeAsFileTime() returns 100s diff --git a/glib/glib.symbols b/glib/glib.symbols index 2649bd40..9c1aeae9 100644 --- a/glib/glib.symbols +++ b/glib/glib.symbols @@ -1127,6 +1127,7 @@ g_thread_init_glib g_thread_functions_for_glib_use g_threads_got_initialized g_thread_use_default_impl +g_thread_gettime #endif g_thread_create_full g_thread_error_quark diff --git a/glib/gthread.c b/glib/gthread.c index 116c2af2..81df421a 100644 --- a/glib/gthread.c +++ b/glib/gthread.c @@ -80,6 +80,8 @@ static void g_thread_cleanup (gpointer data); static void g_thread_fail (void); static guint64 gettime (void); +guint64 (*g_thread_gettime) (void) = gettime; + /* Global variables */ static GSystemThread zero_thread; /* This is initialized to all zero */ @@ -108,9 +110,8 @@ GThreadFunctions g_thread_functions_for_glib_use = { NULL, /* thread_join */ NULL, /* thread_exit */ NULL, /* thread_set_priority */ - NULL, /* thread_self */ - NULL, /* thread_equal */ - gettime /* gettime */ + NULL, /* thread_self */ + NULL /* thread_equal */ }; /* Local data */ diff --git a/glib/gthread.h b/glib/gthread.h index e6f1389f..79099f17 100644 --- a/glib/gthread.h +++ b/glib/gthread.h @@ -106,13 +106,14 @@ struct _GThreadFunctions void (*thread_self) (gpointer thread); gboolean (*thread_equal) (gpointer thread1, gpointer thread2); - guint64 (*gettime) (void); }; GLIB_VAR GThreadFunctions g_thread_functions_for_glib_use; GLIB_VAR gboolean g_thread_use_default_impl; GLIB_VAR gboolean g_threads_got_initialized; +GLIB_VAR guint64 (*g_thread_gettime) (void); + /* initializes the mutex/cond/private implementation for glib, might * only be called once, and must not be called directly or indirectly * from another glib-function, e.g. as a callback. diff --git a/glib/gtimer.c b/glib/gtimer.c index be1dc26f..aa290d05 100644 --- a/glib/gtimer.c +++ b/glib/gtimer.c @@ -53,7 +53,7 @@ #define G_NSEC_PER_SEC 1000000000 -#define GETTIME(v) (v = G_THREAD_UF (gettime, ())) +#define GETTIME(v) (v = g_thread_gettime ()) struct _GTimer { diff --git a/gthread/gthread-impl.c b/gthread/gthread-impl.c index d8f26d4c..64590773 100644 --- a/gthread/gthread-impl.c +++ b/gthread/gthread-impl.c @@ -312,6 +312,8 @@ g_thread_init (GThreadFunctions* init) g_thread_use_default_impl = FALSE; g_thread_functions_for_glib_use = *init; + if (g_thread_gettime_impl) + g_thread_gettime = g_thread_gettime_impl; supported = (init->mutex_new && init->mutex_lock && @@ -332,8 +334,7 @@ g_thread_init (GThreadFunctions* init) init->thread_join && init->thread_exit && init->thread_set_priority && - init->thread_self && - init->gettime); + init->thread_self); /* if somebody is calling g_thread_init (), it means that he wants to * have thread support, so check this diff --git a/gthread/gthread-none.c b/gthread/gthread-none.c index fb4c8871..6fbeff16 100644 --- a/gthread/gthread-none.c +++ b/gthread/gthread-none.c @@ -34,4 +34,6 @@ static GThreadFunctions g_thread_functions_for_glib_use_default; /* is NULLified */ +static guint64 (*g_thread_gettime_impl) (void) = NULL; + #define G_MUTEX_SIZE 0 diff --git a/gthread/gthread-posix.c b/gthread/gthread-posix.c index 711fcd3a..01121bf4 100644 --- a/gthread/gthread-posix.c +++ b/gthread/gthread-posix.c @@ -426,23 +426,20 @@ g_thread_equal_posix_impl (gpointer thread1, gpointer thread2) return (pthread_equal (*(pthread_t*)thread1, *(pthread_t*)thread2) != 0); } +#ifdef USE_CLOCK_GETTIME static guint64 -g_gettime_posix_impl (void) +gettime (void) { -#ifdef USE_CLOCK_GETTIME struct timespec tv; clock_gettime (posix_clock, &tv); return (guint64) tv.tv_sec * G_NSEC_PER_SEC + tv.tv_nsec; +} +static guint64 (*g_thread_gettime_impl)(void) = gettime; #else - struct timeval tv; - - gettimeofday (&tv, NULL); - - return (guint64) tv.tv_sec * G_NSEC_PER_SEC + tv.tv_usec * (G_NSEC_PER_SEC / G_USEC_PER_SEC); +static guint64 (*g_thread_gettime_impl)(void) = 0; #endif -} static GThreadFunctions g_thread_functions_for_glib_use_default = { @@ -466,6 +463,5 @@ static GThreadFunctions g_thread_functions_for_glib_use_default = g_thread_exit_posix_impl, g_thread_set_priority_posix_impl, g_thread_self_posix_impl, - g_thread_equal_posix_impl, - g_gettime_posix_impl + g_thread_equal_posix_impl }; diff --git a/gthread/gthread-win32.c b/gthread/gthread-win32.c index 78e2ecda..657423f4 100644 --- a/gthread/gthread-win32.c +++ b/gthread/gthread-win32.c @@ -546,7 +546,7 @@ g_thread_join_win32_impl (gpointer thread) } static guint64 -g_gettime_win32_impl (void) +g_thread_gettime_impl (void) { guint64 v; @@ -583,8 +583,7 @@ static GThreadFunctions g_thread_functions_for_glib_use_default = g_thread_exit_win32_impl, g_thread_set_priority_win32_impl, g_thread_self_win32_impl, - NULL, /* no equal function necessary */ - g_gettime_win32_impl + NULL /* no equal function necessary */ }; #define HAVE_G_THREAD_IMPL_INIT -- 2.34.1