mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-23 02:32:11 +01:00
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:
parent
2545f318f8
commit
df09ca7bcd
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user