mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-23 10:42: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 --- */
|
/* --- functions --- */
|
||||||
|
|
||||||
#define DATALIST_LOCK_BIT 2
|
|
||||||
|
|
||||||
G_ALWAYS_INLINE static inline GData *
|
G_ALWAYS_INLINE static inline GData *
|
||||||
g_datalist_lock_and_get (GData **datalist)
|
g_datalist_lock_and_get (GData **datalist)
|
||||||
{
|
{
|
||||||
guintptr ptr;
|
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);
|
return G_DATALIST_CLEAN_POINTER (ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
g_datalist_unlock (GData **datalist)
|
|
||||||
{
|
|
||||||
g_pointer_bit_unlock ((void **)datalist, DATALIST_LOCK_BIT);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
g_datalist_unlock_and_set (GData **datalist, gpointer ptr)
|
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
|
static gsize
|
||||||
|
@ -38,6 +38,26 @@ G_BEGIN_DECLS
|
|||||||
#define G_DATALIST_GET_FLAGS(datalist) \
|
#define G_DATALIST_GET_FLAGS(datalist) \
|
||||||
((gsize) g_atomic_pointer_get (datalist) & G_DATALIST_FLAGS_MASK)
|
((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 >
|
/*< private >
|
||||||
* GDataListUpdateAtomicFunc:
|
* GDataListUpdateAtomicFunc:
|
||||||
* @data: (inout) (nullable) (not optional): the existing data corresponding
|
* @data: (inout) (nullable) (not optional): the existing data corresponding
|
||||||
|
Loading…
x
Reference in New Issue
Block a user