gdataset: expose g_datalist_lock()/g_datalist_unlock() as private API

g_datalist_id_update_atomic() allows it to use the GData set lock, by
performing complex operations while holding the lock.

Expose the g_datalist_{lock,unlock}() functions as private API. That
will be useful, for further using the GData lock for the callers
purpose.
This commit is contained in:
Thomas Haller 2024-03-06 17:03:13 +01:00
parent 2545f318f8
commit df09ca7bcd
2 changed files with 22 additions and 10 deletions

View File

@ -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

View File

@ -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