Removing the last thing in a dataset frees the dataset, and if the
datalist was in a dataset, we can't safely unlock it after the dataset
has been freed. Unlock it sooner.
Signed-off-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
Bug: https://bugzilla.gnome.org/show_bug.cgi?id=666113
Reviewed-by: Matthias Clasen <mclasen@redhat.com>
{
G_DATALIST_SET_POINTER (datalist, NULL);
g_free (d);
+ /* datalist may be situated in dataset, so must not be
+ * unlocked after we free it
+ */
+ g_datalist_unlock (datalist);
/* the dataset destruction *must* be done
* prior to invocation of the data destroy function
if (dataset)
g_dataset_destroy_internal (dataset);
}
-
- g_datalist_unlock (datalist);
+ else
+ {
+ g_datalist_unlock (datalist);
+ }
/* We found and removed an old value
* the GData struct *must* already be unlinked