mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-05 10:38:08 +01: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;
|
||||
}
|
||||
|
||||
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 *
|
||||
datalist_find (GData *data, GQuark key_id, guint32 *out_idx)
|
||||
{
|
||||
@ -310,7 +326,6 @@ void
|
||||
g_datalist_clear (GData **datalist)
|
||||
{
|
||||
GData *data;
|
||||
guint i;
|
||||
|
||||
g_return_if_fail (datalist != NULL);
|
||||
|
||||
@ -324,13 +339,7 @@ g_datalist_clear (GData **datalist)
|
||||
|
||||
g_datalist_unlock_and_set (datalist, NULL);
|
||||
|
||||
for (i = 0; i < data->len; i++)
|
||||
{
|
||||
if (data->data[i].data && data->data[i].destroy)
|
||||
data->data[i].destroy (data->data[i].data);
|
||||
}
|
||||
|
||||
g_free (data);
|
||||
datalist_destroy (data);
|
||||
}
|
||||
|
||||
/* HOLDS: g_dataset_global_lock */
|
||||
@ -359,7 +368,6 @@ g_dataset_destroy_internal (GDataset *dataset)
|
||||
while (dataset)
|
||||
{
|
||||
GData *data;
|
||||
guint i;
|
||||
|
||||
data = G_DATALIST_GET_POINTER (&dataset->datalist);
|
||||
|
||||
@ -376,12 +384,7 @@ g_dataset_destroy_internal (GDataset *dataset)
|
||||
|
||||
G_UNLOCK (g_dataset_global);
|
||||
|
||||
for (i = 0; i < data->len; i++)
|
||||
{
|
||||
if (data->data[i].data && data->data[i].destroy)
|
||||
data->data[i].destroy (data->data[i].data);
|
||||
}
|
||||
g_free (data);
|
||||
datalist_destroy (data);
|
||||
|
||||
G_LOCK (g_dataset_global);
|
||||
dataset = g_dataset_lookup (dataset_location);
|
||||
|
Loading…
x
Reference in New Issue
Block a user