From: Sebastian Wilhelmi Date: Thu, 26 Feb 2004 16:53:55 +0000 (+0000) Subject: empty G_ATOMIC_MEMORY_BARRIER() definition for !G_THREADS_ENABLED X-Git-Tag: GLIB_2_3_5~33 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ea9d13892e392b3509978540c4fe4e4d9841afdf;hp=76c213543aa92511f07dbea5acd85d73a9c57c90;p=platform%2Fupstream%2Fglib.git empty G_ATOMIC_MEMORY_BARRIER() definition for !G_THREADS_ENABLED 2004-02-26 Sebastian Wilhelmi * glib/gatomic.h: empty G_ATOMIC_MEMORY_BARRIER() definition for !G_THREADS_ENABLED * glib/gthread.h: Define g_once and g_static_mutex_get_mutex_impl_shortcut in terms of G_MEMORY_BARRIER, if defined and if we can inline. * configure.in: Remove double checked locking feature check. --- diff --git a/ChangeLog b/ChangeLog index 67bfd3a..cb19c4c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2004-02-26 Sebastian Wilhelmi + * glib/gatomic.h: empty G_ATOMIC_MEMORY_BARRIER() definition for + !G_THREADS_ENABLED + + * glib/gthread.h: Define g_once and + g_static_mutex_get_mutex_impl_shortcut in terms of + G_MEMORY_BARRIER, if defined and if we can inline. + + * configure.in: Remove double checked locking feature check. + * configure.in, config.h.win32.in, glib/gthread.c: Removed the PID niceness surrogate for thread priorities as requested by Tim. It does more harm than good. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 67bfd3a..cb19c4c 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,5 +1,14 @@ 2004-02-26 Sebastian Wilhelmi + * glib/gatomic.h: empty G_ATOMIC_MEMORY_BARRIER() definition for + !G_THREADS_ENABLED + + * glib/gthread.h: Define g_once and + g_static_mutex_get_mutex_impl_shortcut in terms of + G_MEMORY_BARRIER, if defined and if we can inline. + + * configure.in: Remove double checked locking feature check. + * configure.in, config.h.win32.in, glib/gthread.c: Removed the PID niceness surrogate for thread priorities as requested by Tim. It does more harm than good. diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index 67bfd3a..cb19c4c 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,5 +1,14 @@ 2004-02-26 Sebastian Wilhelmi + * glib/gatomic.h: empty G_ATOMIC_MEMORY_BARRIER() definition for + !G_THREADS_ENABLED + + * glib/gthread.h: Define g_once and + g_static_mutex_get_mutex_impl_shortcut in terms of + G_MEMORY_BARRIER, if defined and if we can inline. + + * configure.in: Remove double checked locking feature check. + * configure.in, config.h.win32.in, glib/gthread.c: Removed the PID niceness surrogate for thread priorities as requested by Tim. It does more harm than good. diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 67bfd3a..cb19c4c 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,5 +1,14 @@ 2004-02-26 Sebastian Wilhelmi + * glib/gatomic.h: empty G_ATOMIC_MEMORY_BARRIER() definition for + !G_THREADS_ENABLED + + * glib/gthread.h: Define g_once and + g_static_mutex_get_mutex_impl_shortcut in terms of + G_MEMORY_BARRIER, if defined and if we can inline. + + * configure.in: Remove double checked locking feature check. + * configure.in, config.h.win32.in, glib/gthread.c: Removed the PID niceness surrogate for thread priorities as requested by Tim. It does more harm than good. diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 67bfd3a..cb19c4c 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,5 +1,14 @@ 2004-02-26 Sebastian Wilhelmi + * glib/gatomic.h: empty G_ATOMIC_MEMORY_BARRIER() definition for + !G_THREADS_ENABLED + + * glib/gthread.h: Define g_once and + g_static_mutex_get_mutex_impl_shortcut in terms of + G_MEMORY_BARRIER, if defined and if we can inline. + + * configure.in: Remove double checked locking feature check. + * configure.in, config.h.win32.in, glib/gthread.c: Removed the PID niceness surrogate for thread priorities as requested by Tim. It does more harm than good. diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 67bfd3a..cb19c4c 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,5 +1,14 @@ 2004-02-26 Sebastian Wilhelmi + * glib/gatomic.h: empty G_ATOMIC_MEMORY_BARRIER() definition for + !G_THREADS_ENABLED + + * glib/gthread.h: Define g_once and + g_static_mutex_get_mutex_impl_shortcut in terms of + G_MEMORY_BARRIER, if defined and if we can inline. + + * configure.in: Remove double checked locking feature check. + * configure.in, config.h.win32.in, glib/gthread.c: Removed the PID niceness surrogate for thread priorities as requested by Tim. It does more harm than good. diff --git a/configure.in b/configure.in index 2b3d16f..1c2232d 100644 --- a/configure.in +++ b/configure.in @@ -1188,27 +1188,6 @@ esac AC_MSG_RESULT($GIO) AC_SUBST(GIO) -dnl check for cpu to enable double checked locking when possible -dnl ************************************************************ - -if test x"$have_threads" != xno; then - AC_MSG_CHECKING(whether double checked locking is safe) - # According to glibc/linuxthreads the following platforms do - # not have the notion of a read or write memory barrier and - # therefore the double checked locking should be safe. Have a - # look at pthread_once in glibc/linuxthreads/mutex.c to see, - # what this means. - case $host_cpu in - arm|hppa|i386|i686|ia64|m68k|sh|cris|x86_64) - g_use_double_checked_locking=yes - ;; - *) - g_use_double_checked_locking=no - ;; - esac - AC_MSG_RESULT($g_use_double_checked_locking) -fi - dnl **************************************** dnl *** platform dependent source checks *** dnl **************************************** @@ -2233,24 +2212,6 @@ typedef struct _GMutex* GStaticMutex; _______EOF fi - if test x$g_use_double_checked_locking = xyes; then - cat >>$outfile <<_______EOF -/* double checked locking can be used on this platform */ -#define g_once(once, func, arg) \\ - ((once)->status == G_ONCE_STATUS_READY ? (once)->retval : \\ - g_once_impl (once, func, arg)) -#define g_static_mutex_get_mutex_impl_shortcut(mutex) \\ - (*(mutex) ? *(mutex) : g_static_mutex_get_mutex_impl (mutex)) -_______EOF - else - cat >>$outfile <<_______EOF -/* double checked locking is unsafe to use on this platform, do full locking */ -#define g_once(once, func, arg) (g_once_impl(once, func, arg)) -#define g_static_mutex_get_mutex_impl_shortcut(mutex) \\ - (g_static_mutex_get_mutex_impl (mutex)) -_______EOF -fi - cat >>$outfile <<_______EOF /* This represents a system thread as used by the implementation. An * alien implementaion, as loaded by g_thread_init can only count on @@ -2565,7 +2526,6 @@ xno) g_enable_threads_def="#undef";; esac g_threads_impl_def=$g_threads_impl -g_use_double_checked_locking=$g_use_double_checked_locking g_mutex_has_default="$mutex_has_default" g_mutex_sizeof="$glib_cv_sizeof_gmutex" diff --git a/glib/gatomic.h b/glib/gatomic.h index 1ce92bb..379e750 100644 --- a/glib/gatomic.h +++ b/glib/gatomic.h @@ -341,7 +341,7 @@ g_atomic_pointer_compare_and_exchange (gpointer *atomic, return result == oldval; } -# define G_ATOMIC_MEMORY_BARRIER() /* Not needed */ +# define G_ATOMIC_MEMORY_BARRIER() /* Not needed */ # elif defined(G_ATOMIC_INLINED_IMPLEMENTATION_POWERPC) /* Adapted from CVS version 1.12 of glibc's sysdeps/powerpc/bits/atomic.h @@ -450,7 +450,7 @@ g_atomic_pointer_compare_and_exchange (gpointer *atomic, # error "Your system has an unsupported pointer size" # endif /* GLIB_SIZEOF_VOID_P */ -# define G_ATOMIC_MEMORY_BARRIER() __asm ("sync" : : : "memory") +# define G_ATOMIC_MEMORY_BARRIER() __asm ("sync" : : : "memory") # elif defined(G_ATOMIC_INLINED_IMPLEMENTATION_IA64) /* Adapted from CVS version 1.8 of glibc's sysdeps/ia64/bits/atomic.h @@ -486,7 +486,7 @@ g_atomic_pointer_compare_and_exchange (gpointer *atomic, (long)oldval, (long)newval); } -# define G_ATOMIC_MEMORY_BARRIER() __sync_synchronize () +# define G_ATOMIC_MEMORY_BARRIER() __sync_synchronize () # else /* !G_ATOMIC_INLINED_IMPLEMENTATION_... */ # define G_ATOMIC_USE_FALLBACK_IMPLEMENTATION @@ -503,6 +503,7 @@ gint32 g_atomic_int_exchange_and_add (gint32 *atomic, gint32 val); (*(atomic) == (oldval) ? (*(atomic) = (newval), TRUE) : FALSE) # define g_atomic_int_get(atomic) (*(atomic)) # define g_atomic_pointer_get(atomic) (*(atomic)) +# define G_ATOMIC_MEMORY_BARRIER() /* Not needed */ #endif /* G_THREADS_ENABLED */ #ifdef G_ATOMIC_USE_FALLBACK_IMPLEMENTATION diff --git a/glib/gthread.h b/glib/gthread.h index 884d91a..fe4182f 100644 --- a/glib/gthread.h +++ b/glib/gthread.h @@ -29,6 +29,8 @@ #include #include +#include /* for G_CAN_INLINE */ +#include /* for G_ATOMIC_MEMORY_BARRIER */ G_BEGIN_DECLS @@ -302,6 +304,30 @@ struct _GOnce gpointer g_once_impl (GOnce *once, GThreadFunc func, gpointer arg); +#if defined (G_CAN_INLINE) && defined (G_ATOMIC_MEMORY_BARRIER) +static inline gpointer +g_once (GOnce *once, GThreadFunc func, gpointer arg) +{ + if (once->status != G_ONCE_STATUS_READY) + return g_once_impl (once, func, arg); + + G_ATOMIC_MEMORY_BARRIER (); + return once->retval; +} +static inline GMutex* +g_static_mutex_get_mutex_impl_shortcut (GMutex **mutex) +{ + if (! *mutex) + return g_static_mutex_get_mutex_impl (mutex); + + G_ATOMIC_MEMORY_BARRIER (); + return *mutex; +} +#else /* !G_CAN_INLINE || !G_ATOMIC_MEMORY_BARRIER */ +# define g_once g_once_impl +# define g_static_mutex_get_mutex_impl_shortcut g_static_mutex_get_mutex_impl +#endif /* G_CAN_INLINE && G_ATOMIC_MEMORY_BARRIER*/ + /* these are some convenience macros that expand to nothing if GLib * was configured with --disable-threads. for using StaticMutexes, * you define them with G_LOCK_DEFINE_STATIC (name) or G_LOCK_DEFINE (name)