gdataset: add and use helper g_datalist_lock_and_get()

In all cases after taking the lock with g_datalist_lock(), we also
get the pointer. And it hardly makes sense otherwise.

Replace g_datalist_lock() by g_datalist_lock_and_get() which does
both steps in one.
This commit is contained in:
Thomas Haller 2024-01-05 12:49:10 +01:00
parent eada6be364
commit abe4b4e7d8

View File

@ -133,10 +133,11 @@ static GDataset *g_dataset_cached = NULL; /* should this be
#define DATALIST_LOCK_BIT 2 #define DATALIST_LOCK_BIT 2
static void G_ALWAYS_INLINE static inline GData *
g_datalist_lock (GData **datalist) g_datalist_lock_and_get (GData **datalist)
{ {
g_pointer_bit_lock ((void **)datalist, DATALIST_LOCK_BIT); g_pointer_bit_lock ((void **) datalist, DATALIST_LOCK_BIT);
return G_DATALIST_GET_POINTER (datalist);
} }
static void static void
@ -167,10 +168,7 @@ g_datalist_clear (GData **datalist)
g_return_if_fail (datalist != NULL); g_return_if_fail (datalist != NULL);
g_datalist_lock (datalist); data = g_datalist_lock_and_get (datalist);
data = G_DATALIST_GET_POINTER (datalist);
g_datalist_unlock_and_set (datalist, NULL); g_datalist_unlock_and_set (datalist, NULL);
if (data) if (data)
@ -276,9 +274,7 @@ g_data_set_internal (GData **datalist,
GData *new_d = NULL; GData *new_d = NULL;
GDataElt old, *data, *data_last, *data_end; GDataElt old, *data, *data_last, *data_end;
g_datalist_lock (datalist); d = g_datalist_lock_and_get (datalist);
d = G_DATALIST_GET_POINTER (datalist);
if (new_data == NULL) /* remove */ if (new_data == NULL) /* remove */
{ {
@ -426,9 +422,7 @@ g_data_remove_internal (GData **datalist,
gsize found_keys; gsize found_keys;
gboolean free_d = FALSE; gboolean free_d = FALSE;
g_datalist_lock (datalist); d = g_datalist_lock_and_get (datalist);
d = G_DATALIST_GET_POINTER (datalist);
if (!d) if (!d)
{ {
@ -913,9 +907,7 @@ g_datalist_id_dup_data (GData **datalist,
GData *d; GData *d;
GDataElt *data, *data_end; GDataElt *data, *data_end;
g_datalist_lock (datalist); d = g_datalist_lock_and_get (datalist);
d = G_DATALIST_GET_POINTER (datalist);
if (d) if (d)
{ {
data = d->data; data = d->data;
@ -991,9 +983,7 @@ g_datalist_id_replace_data (GData **datalist,
if (old_destroy) if (old_destroy)
*old_destroy = NULL; *old_destroy = NULL;
g_datalist_lock (datalist); d = g_datalist_lock_and_get (datalist);
d = G_DATALIST_GET_POINTER (datalist);
if (d) if (d)
{ {
data = d->data; data = d->data;
@ -1095,9 +1085,7 @@ g_datalist_get_data (GData **datalist,
g_return_val_if_fail (datalist != NULL, NULL); g_return_val_if_fail (datalist != NULL, NULL);
g_datalist_lock (datalist); d = g_datalist_lock_and_get (datalist);
d = G_DATALIST_GET_POINTER (datalist);
if (d) if (d)
{ {
data = d->data; data = d->data;