+2007-01-16 Matthias Clasen <mclasen@redhat.com>
+
+ * 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 <tml@novell.com>
* glib/gthread.c (gettime): GetSystemTimeAsFileTime() returns 100s
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
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 */
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 */
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.
#define G_NSEC_PER_SEC 1000000000
-#define GETTIME(v) (v = G_THREAD_UF (gettime, ()))
+#define GETTIME(v) (v = g_thread_gettime ())
struct _GTimer
{
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 &&
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
static GThreadFunctions
g_thread_functions_for_glib_use_default; /* is NULLified */
+static guint64 (*g_thread_gettime_impl) (void) = NULL;
+
#define G_MUTEX_SIZE 0
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 =
{
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
};
}
static guint64
-g_gettime_win32_impl (void)
+g_thread_gettime_impl (void)
{
guint64 v;
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