mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-11 23:16:14 +01:00
GStaticMutex: remove ./configure checks
Now that GMutex is exposed we can avoid the dance we did in ./configure to allocate the correct amount of space for it within the GStaticMutex. Remove the checks and move the definitions to gthread.h, trying very hard to keep ABI-stable (even though we will be deprecating this soon).
This commit is contained in:
parent
c33cd00739
commit
4ec6d47806
63
configure.ac
63
configure.ac
@ -2117,7 +2117,6 @@ CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
|
|||||||
dnl determination of G_THREAD_LIBS
|
dnl determination of G_THREAD_LIBS
|
||||||
dnl ******************************
|
dnl ******************************
|
||||||
|
|
||||||
mutex_has_default=no
|
|
||||||
case $have_threads in
|
case $have_threads in
|
||||||
posix)
|
posix)
|
||||||
glib_save_CPPFLAGS="$CPPFLAGS"
|
glib_save_CPPFLAGS="$CPPFLAGS"
|
||||||
@ -2198,10 +2197,6 @@ case $have_threads in
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
LIBS="$glib_save_LIBS"
|
LIBS="$glib_save_LIBS"
|
||||||
mutex_has_default=yes
|
|
||||||
mutex_default_type='pthread_mutex_t'
|
|
||||||
mutex_default_init='PTHREAD_MUTEX_INITIALIZER'
|
|
||||||
mutex_header_file='pthread.h'
|
|
||||||
g_threads_impl="POSIX"
|
g_threads_impl="POSIX"
|
||||||
AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
|
AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
|
||||||
CPPFLAGS="$glib_save_CPPFLAGS"
|
CPPFLAGS="$glib_save_CPPFLAGS"
|
||||||
@ -2430,32 +2425,6 @@ AC_SUBST(G_THREAD_LIBS)
|
|||||||
AC_SUBST(G_THREAD_LIBS_FOR_GTHREAD)
|
AC_SUBST(G_THREAD_LIBS_FOR_GTHREAD)
|
||||||
AC_SUBST(G_THREAD_LIBS_EXTRA)
|
AC_SUBST(G_THREAD_LIBS_EXTRA)
|
||||||
|
|
||||||
dnl **********************************************
|
|
||||||
dnl *** GDefaultMutex setup and initialization ***
|
|
||||||
dnl **********************************************
|
|
||||||
dnl
|
|
||||||
dnl if mutex_has_default = yes, we also got
|
|
||||||
dnl mutex_default_type, mutex_default_init and mutex_header_file
|
|
||||||
if test $mutex_has_default = yes ; then
|
|
||||||
glib_save_CPPFLAGS="$CPPFLAGS"
|
|
||||||
glib_save_LIBS="$LIBS"
|
|
||||||
LIBS="$G_THREAD_LIBS $LIBS"
|
|
||||||
CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
|
|
||||||
GLIB_SIZEOF([#include <$mutex_header_file>],
|
|
||||||
$mutex_default_type,
|
|
||||||
gmutex)
|
|
||||||
GLIB_BYTE_CONTENTS([#include <$mutex_header_file>],
|
|
||||||
$mutex_default_type,
|
|
||||||
gmutex,
|
|
||||||
$glib_cv_sizeof_gmutex,
|
|
||||||
$mutex_default_init)
|
|
||||||
if test x"$glib_cv_byte_contents_gmutex" = xno; then
|
|
||||||
mutex_has_default=no
|
|
||||||
fi
|
|
||||||
CPPFLAGS="$glib_save_CPPFLAGS"
|
|
||||||
LIBS="$glib_save_LIBS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_CHECK_FUNCS(clock_gettime, [], [
|
AC_CHECK_FUNCS(clock_gettime, [], [
|
||||||
AC_CHECK_LIB(rt, clock_gettime, [
|
AC_CHECK_LIB(rt, clock_gettime, [
|
||||||
AC_DEFINE(HAVE_CLOCK_GETTIME, 1)
|
AC_DEFINE(HAVE_CLOCK_GETTIME, 1)
|
||||||
@ -3250,38 +3219,11 @@ _______EOF
|
|||||||
#endif
|
#endif
|
||||||
_______EOF
|
_______EOF
|
||||||
|
|
||||||
|
|
||||||
echo >>$outfile
|
echo >>$outfile
|
||||||
if test x$g_mutex_has_default = xyes; then
|
cat >>$outfile <<_______EOF
|
||||||
cat >>$outfile <<_______EOF
|
|
||||||
#define G_THREADS_ENABLED
|
#define G_THREADS_ENABLED
|
||||||
#define G_THREADS_IMPL_$g_threads_impl_def
|
#define G_THREADS_IMPL_$g_threads_impl_def
|
||||||
typedef struct _GStaticMutex GStaticMutex;
|
|
||||||
struct _GStaticMutex
|
|
||||||
{
|
|
||||||
struct _GMutex *runtime_mutex;
|
|
||||||
union {
|
|
||||||
char pad[[$g_mutex_sizeof]];
|
|
||||||
double dummy_double;
|
|
||||||
void *dummy_pointer;
|
|
||||||
long dummy_long;
|
|
||||||
} static_mutex;
|
|
||||||
};
|
|
||||||
#define G_STATIC_MUTEX_INIT { NULL, { { $g_mutex_contents} } }
|
|
||||||
#define g_static_mutex_get_mutex(mutex) \\
|
|
||||||
(g_thread_use_default_impl ? ((GMutex*)(gpointer) ((mutex)->static_mutex.pad)) : \\
|
|
||||||
g_static_mutex_get_mutex_impl_shortcut (&((mutex)->runtime_mutex)))
|
|
||||||
_______EOF
|
_______EOF
|
||||||
else
|
|
||||||
cat >>$outfile <<_______EOF
|
|
||||||
#define G_THREADS_ENABLED
|
|
||||||
#define G_THREADS_IMPL_$g_threads_impl_def
|
|
||||||
typedef struct _GMutex* GStaticMutex;
|
|
||||||
#define G_STATIC_MUTEX_INIT NULL
|
|
||||||
#define g_static_mutex_get_mutex(mutex) \\
|
|
||||||
(g_static_mutex_get_mutex_impl_shortcut (mutex))
|
|
||||||
_______EOF
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat >>$outfile <<_______EOF
|
cat >>$outfile <<_______EOF
|
||||||
/* This represents a system thread as used by the implementation. An
|
/* This represents a system thread as used by the implementation. An
|
||||||
@ -3670,10 +3612,7 @@ g_have_eilseq=$have_eilseq
|
|||||||
|
|
||||||
g_threads_impl_def=$g_threads_impl
|
g_threads_impl_def=$g_threads_impl
|
||||||
|
|
||||||
g_mutex_has_default="$mutex_has_default"
|
|
||||||
g_mutex_sizeof="$glib_cv_sizeof_gmutex"
|
|
||||||
g_system_thread_sizeof="$glib_cv_sizeof_system_thread"
|
g_system_thread_sizeof="$glib_cv_sizeof_system_thread"
|
||||||
g_mutex_contents="$glib_cv_byte_contents_gmutex"
|
|
||||||
|
|
||||||
g_memory_barrier_needed="$glib_memory_barrier_needed"
|
g_memory_barrier_needed="$glib_memory_barrier_needed"
|
||||||
g_gcc_atomic_ops="$glib_cv_gcc_has_builtin_atomic_operations"
|
g_gcc_atomic_ops="$glib_cv_gcc_has_builtin_atomic_operations"
|
||||||
|
@ -168,10 +168,6 @@ gboolean g_thread_get_initialized (void);
|
|||||||
/* internal function for fallback static mutex implementation */
|
/* internal function for fallback static mutex implementation */
|
||||||
GMutex* g_static_mutex_get_mutex_impl (GMutex **mutex);
|
GMutex* g_static_mutex_get_mutex_impl (GMutex **mutex);
|
||||||
|
|
||||||
#define g_static_mutex_get_mutex_impl_shortcut(mutex) \
|
|
||||||
(g_atomic_pointer_get (mutex) ? *(mutex) : \
|
|
||||||
g_static_mutex_get_mutex_impl (mutex))
|
|
||||||
|
|
||||||
/* shorthands for conditional and unconditional function calls */
|
/* shorthands for conditional and unconditional function calls */
|
||||||
|
|
||||||
#define G_THREAD_UF(op, arglist) \
|
#define G_THREAD_UF(op, arglist) \
|
||||||
@ -219,11 +215,19 @@ gpointer g_thread_join (GThread *thread);
|
|||||||
void g_thread_set_priority (GThread *thread,
|
void g_thread_set_priority (GThread *thread,
|
||||||
GThreadPriority priority);
|
GThreadPriority priority);
|
||||||
|
|
||||||
/* GStaticMutexes can be statically initialized with the value
|
#ifdef G_OS_WIN32
|
||||||
* G_STATIC_MUTEX_INIT, and then they can directly be used, that is
|
typedef GMutex * GStaticMutex;
|
||||||
* much easier, than having to explicitly allocate the mutex before
|
#define G_STATIC_MUTEX_INIT NULL
|
||||||
* use
|
#define g_static_mutex_get_mutex g_static_mutex_get_mutex_impl
|
||||||
*/
|
#else /* G_OS_WIN32 */
|
||||||
|
typedef struct {
|
||||||
|
struct _GMutex *unused;
|
||||||
|
GMutex mutex;
|
||||||
|
} GStaticMutex;
|
||||||
|
#define G_STATIC_MUTEX_INIT { NULL, G_MUTEX_INIT }
|
||||||
|
#define g_static_mutex_get_mutex(s) (&(s)->mutex)
|
||||||
|
#endif /* G_OS_WIN32 */
|
||||||
|
|
||||||
#define g_static_mutex_lock(mutex) \
|
#define g_static_mutex_lock(mutex) \
|
||||||
g_mutex_lock (g_static_mutex_get_mutex (mutex))
|
g_mutex_lock (g_static_mutex_get_mutex (mutex))
|
||||||
#define g_static_mutex_trylock(mutex) \
|
#define g_static_mutex_trylock(mutex) \
|
||||||
|
Loading…
Reference in New Issue
Block a user