diff --git a/glib/gdataset.c b/glib/gdataset.c index c85b19aca..6cb0493b2 100644 --- a/glib/gdataset.c +++ b/glib/gdataset.c @@ -151,27 +151,19 @@ static GDataset *g_dataset_cached = NULL; /* should this be /* --- functions --- */ -#define DATALIST_LOCK_BIT 2 - G_ALWAYS_INLINE static inline GData * g_datalist_lock_and_get (GData **datalist) { guintptr ptr; - g_pointer_bit_lock_and_get ((void **) datalist, DATALIST_LOCK_BIT, &ptr); + g_pointer_bit_lock_and_get ((void **) datalist, _G_DATALIST_LOCK_BIT, &ptr); return G_DATALIST_CLEAN_POINTER (ptr); } -static void -g_datalist_unlock (GData **datalist) -{ - g_pointer_bit_unlock ((void **)datalist, DATALIST_LOCK_BIT); -} - static void g_datalist_unlock_and_set (GData **datalist, gpointer ptr) { - g_pointer_bit_unlock_and_set ((void **) datalist, DATALIST_LOCK_BIT, ptr, G_DATALIST_FLAGS_MASK_INTERNAL); + g_pointer_bit_unlock_and_set ((void **) datalist, _G_DATALIST_LOCK_BIT, ptr, G_DATALIST_FLAGS_MASK_INTERNAL); } static gsize diff --git a/glib/gdatasetprivate.h b/glib/gdatasetprivate.h index 228133c5f..cc76a9a73 100644 --- a/glib/gdatasetprivate.h +++ b/glib/gdatasetprivate.h @@ -38,6 +38,26 @@ G_BEGIN_DECLS #define G_DATALIST_GET_FLAGS(datalist) \ ((gsize) g_atomic_pointer_get (datalist) & G_DATALIST_FLAGS_MASK) +#define _G_DATALIST_LOCK_BIT 2 + +#define g_datalist_lock(datalist) \ + G_STMT_START \ + { \ + GData **const _datalist = (datalist); \ + \ + g_pointer_bit_lock ((void **) _datalist, _G_DATALIST_LOCK_BIT); \ + } \ + G_STMT_END + +#define g_datalist_unlock(datalist) \ + G_STMT_START \ + { \ + GData **const _datalist = (datalist); \ + \ + g_pointer_bit_unlock ((void **) _datalist, _G_DATALIST_LOCK_BIT); \ + } \ + G_STMT_END + /*< private > * GDataListUpdateAtomicFunc: * @data: (inout) (nullable) (not optional): the existing data corresponding