mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-05-13 09:23:13 +02:00
gdataset: extract datalist_destroy() helper function for releasing GData
Avoid duplicated code. Also, the "if (data->data[i].data && " check is unnecessary. The data pointer is never NULL, because g_datalist_id_set_data() will treat that as indication to remove the entry.
This commit is contained in:
parent
6063cdb79f
commit
2900575283
@ -274,6 +274,22 @@ datalist_shrink (GData **data, GData **d_to_free)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
datalist_destroy (GData *data)
|
||||||
|
{
|
||||||
|
guint32 i;
|
||||||
|
|
||||||
|
/* Must be called without lock. Will free @data and invoke the
|
||||||
|
* destroy() notifications. */
|
||||||
|
for (i = 0; i < data->len; i++)
|
||||||
|
{
|
||||||
|
if (data->data[i].destroy)
|
||||||
|
data->data[i].destroy (data->data[i].data);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free (data);
|
||||||
|
}
|
||||||
|
|
||||||
static GDataElt *
|
static GDataElt *
|
||||||
datalist_find (GData *data, GQuark key_id, guint32 *out_idx)
|
datalist_find (GData *data, GQuark key_id, guint32 *out_idx)
|
||||||
{
|
{
|
||||||
@ -310,7 +326,6 @@ void
|
|||||||
g_datalist_clear (GData **datalist)
|
g_datalist_clear (GData **datalist)
|
||||||
{
|
{
|
||||||
GData *data;
|
GData *data;
|
||||||
guint i;
|
|
||||||
|
|
||||||
g_return_if_fail (datalist != NULL);
|
g_return_if_fail (datalist != NULL);
|
||||||
|
|
||||||
@ -324,13 +339,7 @@ g_datalist_clear (GData **datalist)
|
|||||||
|
|
||||||
g_datalist_unlock_and_set (datalist, NULL);
|
g_datalist_unlock_and_set (datalist, NULL);
|
||||||
|
|
||||||
for (i = 0; i < data->len; i++)
|
datalist_destroy (data);
|
||||||
{
|
|
||||||
if (data->data[i].data && data->data[i].destroy)
|
|
||||||
data->data[i].destroy (data->data[i].data);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_free (data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* HOLDS: g_dataset_global_lock */
|
/* HOLDS: g_dataset_global_lock */
|
||||||
@ -359,7 +368,6 @@ g_dataset_destroy_internal (GDataset *dataset)
|
|||||||
while (dataset)
|
while (dataset)
|
||||||
{
|
{
|
||||||
GData *data;
|
GData *data;
|
||||||
guint i;
|
|
||||||
|
|
||||||
data = G_DATALIST_GET_POINTER (&dataset->datalist);
|
data = G_DATALIST_GET_POINTER (&dataset->datalist);
|
||||||
|
|
||||||
@ -376,12 +384,7 @@ g_dataset_destroy_internal (GDataset *dataset)
|
|||||||
|
|
||||||
G_UNLOCK (g_dataset_global);
|
G_UNLOCK (g_dataset_global);
|
||||||
|
|
||||||
for (i = 0; i < data->len; i++)
|
datalist_destroy (data);
|
||||||
{
|
|
||||||
if (data->data[i].data && data->data[i].destroy)
|
|
||||||
data->data[i].destroy (data->data[i].data);
|
|
||||||
}
|
|
||||||
g_free (data);
|
|
||||||
|
|
||||||
G_LOCK (g_dataset_global);
|
G_LOCK (g_dataset_global);
|
||||||
dataset = g_dataset_lookup (dataset_location);
|
dataset = g_dataset_lookup (dataset_location);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user