From 7c24467a1c9ff129025cb59027606f0daf405c3c Mon Sep 17 00:00:00 2001 From: Tim Janik Date: Tue, 13 Dec 2005 09:15:52 +0000 Subject: [PATCH] added g_atomic_pointer_set() and g_atomic_int_set() for systems where the Tue Dec 13 10:13:32 2005 Tim Janik * glib/gatomic.h: added g_atomic_pointer_set() and g_atomic_int_set() for systems where the initialization of atomic variables requires a write memory barrier. --- ChangeLog | 6 ++++++ ChangeLog.pre-2-10 | 6 ++++++ ChangeLog.pre-2-12 | 6 ++++++ glib/gatomic.c | 18 ++++++++++++++++++ glib/gatomic.h | 22 ++++++++++++++-------- 5 files changed, 50 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5435936a..50260fcc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Tue Dec 13 10:13:32 2005 Tim Janik + + * glib/gatomic.h: added g_atomic_pointer_set() and g_atomic_int_set() + for systems where the initialization of atomic variables requires a + write memory barrier. + 2005-12-09 Matthias Clasen * configure.in: Bump version diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 5435936a..50260fcc 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +Tue Dec 13 10:13:32 2005 Tim Janik + + * glib/gatomic.h: added g_atomic_pointer_set() and g_atomic_int_set() + for systems where the initialization of atomic variables requires a + write memory barrier. + 2005-12-09 Matthias Clasen * configure.in: Bump version diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index 5435936a..50260fcc 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,9 @@ +Tue Dec 13 10:13:32 2005 Tim Janik + + * glib/gatomic.h: added g_atomic_pointer_set() and g_atomic_int_set() + for systems where the initialization of atomic variables requires a + write memory barrier. + 2005-12-09 Matthias Clasen * configure.in: Bump version diff --git a/glib/gatomic.c b/glib/gatomic.c index 7b191a6e..5c35868e 100644 --- a/glib/gatomic.c +++ b/glib/gatomic.c @@ -613,6 +613,15 @@ g_atomic_int_get (volatile gint *atomic) return result; } +void +g_atomic_int_set (volatile gint *atomic, + gint newval) +{ + g_mutex_lock (g_atomic_mutex); + *atomic = newval; + g_mutex_unlock (g_atomic_mutex); +} + gpointer g_atomic_pointer_get (volatile gpointer *atomic) { @@ -624,6 +633,15 @@ g_atomic_pointer_get (volatile gpointer *atomic) return result; } + +void +g_atomic_pointer_set (volatile gpointer *atomic, + gpointer newval) +{ + g_mutex_lock (g_atomic_mutex); + *atomic = newval; + g_mutex_unlock (g_atomic_mutex); +} #endif /* G_ATOMIC_OP_MEMORY_BARRIER_NEEDED */ #elif defined (G_ATOMIC_OP_MEMORY_BARRIER_NEEDED) gint diff --git a/glib/gatomic.h b/glib/gatomic.h index ab8c2d98..fefe2aff 100644 --- a/glib/gatomic.h +++ b/glib/gatomic.h @@ -34,23 +34,29 @@ G_BEGIN_DECLS -gint g_atomic_int_exchange_and_add (volatile gint *atomic, - gint val); -void g_atomic_int_add (volatile gint *atomic, - gint val); -gboolean g_atomic_int_compare_and_exchange (volatile gint *atomic, - gint oldval, +gint g_atomic_int_exchange_and_add (volatile gint *atomic, + gint val); +void g_atomic_int_add (volatile gint *atomic, + gint val); +gboolean g_atomic_int_compare_and_exchange (volatile gint *atomic, + gint oldval, gint newval); gboolean g_atomic_pointer_compare_and_exchange (volatile gpointer *atomic, gpointer oldval, gpointer newval); gint g_atomic_int_get (volatile gint *atomic); +void g_atomic_int_set (volatile gint *atomic, + gint newval); gpointer g_atomic_pointer_get (volatile gpointer *atomic); +void g_atomic_pointer_set (volatile gpointer *atomic, + gpointer newval); #ifndef G_ATOMIC_OP_MEMORY_BARRIER_NEEDED -# define g_atomic_int_get(atomic) (*(atomic)) -# define g_atomic_pointer_get(atomic) (*(atomic)) +# define g_atomic_int_get(atomic) (*(atomic)) +# define g_atomic_int_set(atomic, newval) ((void) (*(atomic) = (newval))) +# define g_atomic_pointer_get(atomic) (*(atomic)) +# define g_atomic_pointer_set(atomic, newval) ((void) (*(atomic) = (newval))) #endif /* G_ATOMIC_OP_MEMORY_BARRIER_NEEDED */ #define g_atomic_int_inc(atomic) (g_atomic_int_add ((atomic), 1)) -- 2.34.1