[tracker/wip/carlosg/leak-fixes: 1/4] libtracker-sparql: Fix possible invalid writes in TrackerResource dispose
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/wip/carlosg/leak-fixes: 1/4] libtracker-sparql: Fix possible invalid writes in TrackerResource dispose
- Date: Sat, 6 Jun 2020 13:21:35 +0000 (UTC)
commit e83b6911f582c061b0300c88c77556b008e34702
Author: Carlos Garnacho <carlosg gnome org>
Date: Wed Jun 3 17:29:27 2020 +0200
libtracker-sparql: Fix possible invalid writes in TrackerResource dispose
A resource may indirectly point to itself, in which case, clearing the
properties hashtables on finalize() will end up calling dispose() again
on this resource, but the hashtables were now gone.
Ensure the hashtables are freed/nullified on dispose(), so this kind
of reentrancy cannot happen. Any later time(s) the dispose method happens
will be on empty hashtables.
src/libtracker-sparql/tracker-resource.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
---
diff --git a/src/libtracker-sparql/tracker-resource.c b/src/libtracker-sparql/tracker-resource.c
index 0f0c361a6..15eeac575 100644
--- a/src/libtracker-sparql/tracker-resource.c
+++ b/src/libtracker-sparql/tracker-resource.c
@@ -150,8 +150,8 @@ dispose (GObject *object)
priv = GET_PRIVATE (TRACKER_RESOURCE (object));
- g_hash_table_remove_all (priv->overwrite);
- g_hash_table_remove_all (priv->properties);
+ g_clear_pointer (&priv->overwrite, g_hash_table_unref);
+ g_clear_pointer (&priv->properties, g_hash_table_unref);
G_OBJECT_CLASS (tracker_resource_parent_class)->dispose (object);
}
@@ -181,9 +181,6 @@ finalize (GObject *object)
g_free (priv->identifier);
}
- g_hash_table_unref (priv->overwrite);
- g_hash_table_unref (priv->properties);
-
(G_OBJECT_CLASS (tracker_resource_parent_class)->finalize)(object);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]